Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between these two conditions?

Sorry if my question is silly or not it doesnot matter. But i just want to know what will happen in these two conditions.

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

Both are giving same results only. But i know there is some reasons.I dont know about that. What is difference between these two conditions?

like image 467
Ami Avatar asked Dec 01 '22 21:12

Ami


2 Answers

There are no difference between them at all. Many programmers use the 2nd way just to make sure that they don't get a NullPointerException. That's all.

    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");
    }
like image 141
Rohit Jain Avatar answered Dec 24 '22 01:12

Rohit Jain


Second one does not throw NullPointerException. But again it is considered as bad code because it might happen that str is null and you do not detect that bug at this point instead you detect it somewhere else

  1. Given a choice prefer 1 since it helps you to find bugs in the program at early stage.
  2. Else add check for null if str is null then you will be able to make out are strings really not equal or is second string does not present

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

For first case

    if(str.equals("test")){//Generate NullPointerException if str is null
        System.out.println("After");
    }
like image 39
Amit Deshpande Avatar answered Dec 24 '22 00:12

Amit Deshpande