Java 这两种情况有什么区别?
对不起,如果我的问题是否愚蠢,那没关系。但我只想知道在这两种情况下会发生什么Java 这两种情况有什么区别?,java,string,if-statement,Java,String,If Statement,对不起,如果我的问题是否愚蠢,那没关系。但我只想知道在这两种情况下会发生什么 public class Test { public static void main(String[] args) { String str="test"; if(str.equals("test")){ System.out.println("After"); } if("test".equals(str)){
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");
}
}
}
两者的结果都是一样的。但是我知道有一些原因,我不知道。这两种情况有什么区别 第二个不会抛出
NullPointerException
。但同样,它被视为坏代码,因为可能会发生str
为null
的情况,此时您没有检测到该错误,而是在其他地方检测到它
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");
}
他们之间根本没有区别。许多程序员使用第二种方法只是为了确保他们不会得到
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");
}
当您尝试第一次修复静态字符串时,您可以在许多情况下避免空指针异常。实际上两者都是相同的。这两者之间没有区别。Equal方法比较两个字符串对象的内容。因此,在第一种情况下,它将str变量与“test”进行比较,在第二种情况下,它将“test”与str变量进行比较。第一个
如果-语句测试,那么str
是否等于测试“
。第二个if
-语句测试,“test”
是否等于str
。因此,这两个if
-语句之间的区别在于,在第一个语句中,您使用参数“test”
向str
对象发送一条消息。然后比较str
对象是否等于参数并返回true
或false
。第二个if
-语句将消息发送到“test”
<代码>“测试”
也是一个字符串对象。所以现在“test”
进行比较,无论它是否等于str
并返回true
或false
,它们做的差不多
唯一的区别是,第一个示例使用字符串对象“str”的equal()方法和“test”-string作为参数,而第二个示例使用字符串“text”的equal()方法和“str”作为参数
第二个变量不能抛出NullPointerException,因为它显然不是null