对不起,如果我的问题很愚蠢或无关紧要。但我只是想知道在这两种情况下会发生什么。
public class Test {
public static void main(String[] args)
{
String str="test";
if(str.equals("test")){
System.out.println("After");
}
if("test".equals(str)){
System.out.println("Before");
}
}
}
两者都只给出相同的结果。但我知道有一些原因。我不知道。这两个条件有什么区别?
答案 0 :(得分:12)
它们之间没有任何区别。许多程序员使用第二种方式只是为了确保他们没有获得NullPointerException
。就是这样。
String str = null;
if(str.equals("test")) { // NullPointerException
System.out.println("After");
}
if("test".equals(str)) { // No Exception will be thrown. Will return false
System.out.println("Before");
}
答案 1 :(得分:2)
第二个不会抛出NullPointerException
。但又被认为是错误的代码,因为str
可能null
you do not detect that bug at this point instead you detect it somewhere else
和1
null
,因为它可以帮助您在早期阶段找到程序中的错误。如果str
为null
,则if(str == null){
//Add a log that it is null otherwise it will create confusion that
// program is running correctly and still equals fails
}
if("test".equals(str)){
System.out.println("Before");
}
添加检查,然后您就可以确定字符串真的不相等或第二个字符串不存在
if(str.equals("test")){//Generate NullPointerException if str is null
System.out.println("After");
}
对于第一种情况
{{1}}
答案 2 :(得分:2)
实际上两者都是一样的。这两者没有区别。 http://www.javaworld.com/community/node/1006 Equal方法比较两个字符串对象的内容。因此,在第一种情况下,它将str变量与“test”进行比较,然后将“test”与str变量进行比较。
答案 3 :(得分:1)
第一次if
- 语句测试,str
是否等于"test"
。第二个if
- 语句测试,"test"
等于str
。因此,这两个if
- 语句之间的区别在于,首先使用参数str
向"test"
对象发送消息。然后str
对象进行比较,是否等于参数并返回true
或false
。第二个if
- 语句向"test"
发送消息。 "test"
也是一个字符串对象。现在"test"
进行比较,是否等于str
并返回true
或false
。
答案 4 :(得分:1)
他们几乎一样。
唯一的区别是第一个示例使用字符串对象“str”的equal()方法和“test”-string作为参数,而第二个示例使用字符串“text”的equal()方法“str”作为参数。
第二个变体不能抛出NullPointerException,因为它显然不是null。
答案 5 :(得分:0)
当您尝试首先修复静态字符串时,可以避免在许多情况下出现nullpointer异常。