2012-10-26 113 views
4

对不起,如果我的问题是愚蠢或不是没关系。但我只想知道在这两种情况下会发生什么。这两个条件之间的区别?

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"); 
     } 
    } 
} 

两者仅给出相同的结果。但我知道有一些原因,我不知道。这两个条件有什么区别?

回答

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"); 
    } 
2

第二个不扔NullPointerException。但同样它被认为是不好的代码,因为它可能会发生strnullyou do not detect that bug at this point instead you detect it somewhere else

  1. 如果可以选择喜欢1,因为它可以帮助你早期发现程序中的错误。
  2. 否则为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"); 
    } 
0

当您尝试第一次修复静态字符串时,您可以在许多情况下避免出现nullpointer异常。

2

其实两者都是一样的。这两者之间没有区别。 http://www.javaworld.com/community/node/1006等式方法比较两个字符串对象的内容。因此,在第一种情况下,它将str变量与“test”进行比较,然后在第二个比较中将“test”与str变量进行比较。

1

第一if语句来测试,是否str等于"test"。第二个if -statement测试,是否"test"等于str。因此,这两个if -statements之间的区别在于,您首先使用参数"test"str对象发送消息。然后str对象进行比较,无论它是否等于参数并返回truefalse。第二个if -statement发送消息到"test""test"也是一个字符串对象。所以现在比较"test",是否等于str并返回truefalse

1

他们做的差不多。

唯一的区别是第一个示例使用字符串对象“str”的equal()方法和“test”-string作为参数,而第二个示例使用字符串“text”的equal()方法,以“str”作为参数。

第二个变体不能抛出NullPointerException,因为它显然不为null。