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