3 回答
![?](http://img1.sycdn.imooc.com/533e4c0500010c7602000200-100-100.jpg)
TA贡献1825条经验 获得超4个赞
该String.equalsIgnoreCase(String)javadoc的状态:
不考虑大小写考虑,将此字符串与另一个字符串进行比较。如果两个字符串的长度相同,并且两个字符串中的对应字符相等,则忽略大小写,将它们视为相等的忽略大小写。
所以这些语句的行为与String.equalsIgnoreCase(String)产生相同结果的相同,String不论是调用者还是自String变量null。
唯一可能不同的是null,在语句中存在引用可能会引发的引用NullPointerException。
在您的示例中,两条语句可能会拖尾,NullPointerException但可能不在同一位置:
myClass.getLocale().equalsIgnoreCase("en")
|-----|---- two potential NPE
("en").equalsIgnoreCase(myClass.getLocale())
|----- potential NPE
需要注意的是第二种方式是更强大的,如果它只会失败myClass是null在第一可能会失败或者myClass或myClass.getLocale()参考null。
总而言之,如果在您的应用程序myClass中不能null,则应坚持第二种方式。
否则,如果myClass可能null,你应该执行null前检查:
boolean isEqualIgnoreCase = false;
if (myClass != null){
isEqualIgnoreCase = ("en").equalsIgnoreCase(myClass.getLocale());
}
![?](http://img1.sycdn.imooc.com/54586453000163bd02200220-100-100.jpg)
TA贡献1852条经验 获得超7个赞
myClass.getLocale().equalsIgnoreCase("en")
抛出NullPointerException
时myClass.locale
为空。
("en").equalsIgnoreCase(myClass.getLocale())
不编译。
如果您正在谈论"en".equalsIgnoreCase(myClass.getLocale())
,myClass.locale
则为null时可以正常工作。false
将被退回。
![?](http://img1.sycdn.imooc.com/5458620000018a2602200220-100-100.jpg)
TA贡献1744条经验 获得超4个赞
我发现的唯一区别是,在第一个示例中,该语句myClass.getLocale()
不是null安全的,因此可能会以某种方式返回null
并导致NullPointerException。
第二个是安全的,因为您在上调用了一个方法"en"
,null
即使null
用来将a传递给该方法也不会失败也不会失败myClass.getLocale()
。
编辑:两种解释都假定myClass
本身不为null,因此只会getLocale()
失败。在null的情况下,没有一个解决方案是null安全的myClass
-无论如何都会抛出NPE。(@davidxxx)
添加回答
举报