JVM分析:String a = “123“;String b = “123“;a==b的结果是什么?为什么?

String a = "123"; String b = "123"; a==b的结果是 true

String c = new String("123");   a==c的结果是false

String a="123";//会把字符串放到“字符串常量池”中, 此时 常量池中有 “123”,变量a指向常量池中“123”的地址。

String b="123";//JVM会先寻找常量池中是否有内容“123”,发现有之后,就把变量b指向常量池中的同一个地址。

因此,==比较的是地址,他们地址都是相同的,即都是字符串常量池中的地址。

String c= new String("123");//在堆中创建对象,地址指向变量c。 顺便(记得顺便两个字)检查常量池中是否存在内容“123”,如果不存在,则池中也保留一份。

因此,a==c是false,它们指向的是不同的地址,a的地址在常量池中,而c的地址在堆中。

猜你喜欢

转载自blog.csdn.net/x18094/article/details/113873202