我知道String s=new String("123"),可能创建了两个对象,也可能是一个。当常量池中已经存在了“123”这个字符串,那么它只创建一个对象,否则创建两个。那么,最关键的问题来了!!!String s1 = new String("12")+"3",它创建了几个对象????
Java字符串是存储在 常量池还是在堆中,这个问题都被问烂了,但是如果想要真正理解,还是需要看JVM底层的知识的。
我以前弄懂过,又忘了。我印象中是创建了两个对象引用,一个指向s1,一个是无名对象new String("12")
String s=new String("123");
String s1 = new String("12")+"3";
System.out.println(s==s1);
System.out.println(s=="123");
结果:
false
false
是2个对象
你这样想,new一个新对象他就有了一个自己的物理地址。这个问题确实都被问烂了,百度出来都一大片,何必在这里问
【String s1 = new String("12")+"3"】,,可以拆分为两句
String s3 = new String("12");
String s4 = s3+"3";
会牵扯三个对象,,
"12",这个会产生一个对象,只不过这个对象没显示的表现出来。
new String("12"),这个也会产生一个对象,传入的"12"是个对象
s3+"3",,还会产生一个对象。
上图仅供参考,,如有问题还可追问,,(个人见解,如有错误,可以讨论)
答案应该是两个,s,s1,s2只是引用,不是对象!对象就是“3”和“12”,字符串自己本身才是String对象。
String s = new String("3");
这样只是声明了一个指向String对象“3”的一个引用s(同时也创建了对象“3”)。