string.equalsIgnoreCase(object.string)

假设我有一堂课:


public class MyClass {

    String locale;


    public String getLocale(){

        return this.locale;

    }


    public setLocale(String locale){

        this.locale = locale;

    }

}

现在我被告知,以下陈述有区别


myClass.getLocale().equalsIgnoreCase("en")


("en").equalsIgnoreCase(myClass.getLocale())


我一直试图找到它的搜索,但无法做到。有人可以帮我解释一下两者之间的区别吗?


执行时间是否有特别的区别?还有这两个中的哪一个是最佳实践


精慕HU
浏览 210回答 3
3回答

凤凰求蛊

该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());}

慕姐4208626

myClass.getLocale().equalsIgnoreCase("en")抛出NullPointerException时myClass.locale为空。("en").equalsIgnoreCase(myClass.getLocale()) 不编译。如果您正在谈论"en".equalsIgnoreCase(myClass.getLocale()),myClass.locale则为null时可以正常工作。false将被退回。

慕无忌1623718

我发现的唯一区别是,在第一个示例中,该语句myClass.getLocale()不是null安全的,因此可能会以某种方式返回null并导致NullPointerException。第二个是安全的,因为您在上调用了一个方法"en",null即使null用来将a传递给该方法也不会失败也不会失败myClass.getLocale()。编辑:两种解释都假定myClass本身不为null,因此只会getLocale()失败。在null的情况下,没有一个解决方案是null安全的myClass-无论如何都会抛出NPE。(@davidxxx)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java