String s = new String(“xyz”). How many objects has been made after this line of code execute?

前端 未结 20 2984
再見小時候
再見小時候 2020-11-27 02:45

The commonly agreed answer to this interview question is that two objects are created by the code. But I don\'t think so; I wrote some code to confirm.

publi         


        
相关标签:
20条回答
  • 2020-11-27 03:32
            String s1="Pune";
            String s2="Mumbai";
            String s3="Pune";
            String s4=new String("Mumbai");
            System.out.println("S1 :"+s1.hashCode());  //S1 :2499228
            System.out.println("S2 :"+s2.hashCode());  //S2 :-1979126203
            System.out.println("S3 :"+s3.hashCode());  //S3 :2499228
            System.out.println("S4 :"+s4.hashCode());  //S4 :-1979126203
            System.out.println(s2==s4);     // false
    

    As we can see in the above program we are getting a similar hashcode for s2 and s4 respectively although we are getting false using == operator. == operator is used for reference comparison.

    Two objects have been created at "String s4=new String("Mumbai")", one in heap memory and one in stack memory. Therefore s2 compares with s4 which is created in heap memory, not with stack memory.

    0 讨论(0)
  • 2020-11-27 03:34

    There is a way to find how many objects are created using the new keyword (String s1=new String("Rajesh")).

    public class Rajesh {
        public static void main(String[] args){
            String s1=new String("Rajesh");
            System.out.println(s1+s1.intern());
        }
    }
    

    Output:

    RajeshRajesh //s1=Rajesh+s2.intern()=Rajesh
    

    Note: As we know the intern method always hit the string constant pool of heap memory.

    0 讨论(0)
提交回复
热议问题