"".equals(xxx)和xxx.equals("")的区别

今天做项目发现如下这个问题

看见别人用 if ("abc".equals(str)),然后自作聪明地认为 if (str.equals("abc"))是等效的,就这么写

运行后发现出现空指针异常,然后用 debug 调试,发现了当 str != null的时候的确是没有区别的

当 str ==null 的时候,str.equals("abc") 就会出现空指针异常了。

用 null.equals("abc") 直接不通过编译的,所以这种写法本身就是不合法的,即使用变量把 null "包装"起来,能通过编译,但运行起来还是错误的吧!

时间: 2024-08-03 20:33:08

"".equals(xxx)和xxx.equals("")的区别的相关文章

VUE引入模块之import xxx from 'xxx' 和 import {xxx} from 'xxx'的区别

import FunName from ‘../xxx’ export defualt function FunName() { return fetch({ url: '/article/list', method: 'get' }); } import {xxx} from ‘../xxx’ export function FunName() { return fetch({ url: '/article/list', method: 'get' }); } ES中的模块导出导入 expor

equals方法变量和常量位置区别

对于字符串比较,我的习惯用法是   变量.equals(常量) 比如:     a.equals("a") 今天看视频才知道变量在前面与后面有很大影响,正确的写法是常量放前面(可以避免变量为null引起的异常),变量放后面,则上面需要改为("a").equals(a). 对于JDK API上字符串的equals的官方解释是: 比如: public class equalsTest { @SuppressWarnings("rawtypes") p

hashcode()和equals()的作用、区别、联系

    介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode()呢? 因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashCode()既然效率这么高为什么还要equal()呢? 因为hashCode()并不是完全可靠,有时候不同的对象他们生成的

ios dyld: Library not loaded: @rpath/xxx.framework/xxx 之根本原因

碰到问题 dyld: Library not loaded: @rpath/xxx.framework/xxx Referenced from: /var/containers/Bundle/Application/0F41980D-5091-449D-AE29-5D018E3EB554/DemoOC.app/DemoOC Reason: image not found enable Always Embed Swift Standard Libraries option under Build

Java中 == 和 equals()、 equals() 和 hashCode()

 == 和 equals() 记住三句话 1. 语义上:==指的是内存引用一样.equals是指的是逻辑相等.逻辑相等具体的意思由编写者决定. 2. 默认情况下(继承自Object类),equals和==是一样的,除非被覆写(override)了. public boolean equals(Object obj) { return (this == obj); } 3. 最典型equals已经被override的例子是String: String中的字符串文本相等则视为逻辑相等(s1.equa

Error Domain=ASIHTTPRequestErrorDomain Code=8 "Failed to move file from"xxx/xxx"to"xxx/xxx"

今天真的好高兴呀 我解决了一个折磨了我一周的问题,真的是激动地要哭出来了,为了这个问题,我嘴也烂了,头发抓了一地啊.虽然解决方法,最后还是展现出了“百度”的伟大,但是我还是很开心,在这里我展示一下我的战果 问题的表面就是在2G下下载zip包失败,不是每次都失败,而是只要我离开当前页面再次进入当前页面就会失败(进入requestFail),如果只是离开不进入,那么一起正常. 多么诡异呀,起初我也想通过看看进入页面后是不是进行了什么卑鄙的操作,而导致ASI罢工,可是最后我放弃了,因为任何有关ASI的

sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束"XXX"冲突。该冲突发生于数据库"XXX",表"XXX", column 'XXX)

使用如下SQL语句查询出表中外键约束名称: 1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id 3 where f.parent_object_id=object_id('表名') 执行如下SQL语句删除即可. 1 alter table 表名 drop constraint 外键约束名 sql数据库删除表的外键约束(INSERT 语句与 F

拒绝了对对象 'XXX' (数据库 'XXX',架构 'dbo')的 SELECT 权限

2010-04-17 23:16 在IIS里测试ASP.NET网站时会遇到这样的问题(ASP.NET+SQL2005)我自己的解决方法是这样的: 1.打开SQL2005管理界面(没有安装SQLServer2005_SSMSEE.msi的话从VS2005服务器里进去) 2.在“对象资源管理器”里,展开“数据库”下面的“安全性”,右键“登录名”弹出“新建登录名...”弹出新建登录名窗口,登录名处右边“搜索”——“高级”——“立即查找”,选择“ASPNET”,两次确定后成功添加用户“ASPNET”,下

DerivedData/xxx-fxhqtzymbwegttddoznsqpakmlvp/Build/Products/Debug-iphonesimulator/xxx.app/xxx

运行程序报错 ld: file not found: ~/Library/Developer/Xcode/DerivedData/xxx-fxhqtzymbwegttddoznsqpakmlvp/Build/Products/Debug-iphonesimulator/xxx.app/xxx clang: error: linker command failed with exit code 1 (use -v to see invocation) clean 项目后  删除DerivedDat

error: expected declaration specifiers or '...' before xxx(xxx是函数形参)

在使用带参有返回值的函数指针做参数时,编译出现下面情况 -------- error: expected declaration specifiers or '...' before 'FunType' 情形描述: a.h: typedef void (*FunType)(); void callFun(FunType p); a.c : #include "a.h" FunType myfuntype=NULL; void callFun(FunType p) { myfuntype