2 hu4303105 hu4303105 于 2017.08.28 23:39 提问

java基础问题,求大神详解!

我知道String s=new String("123"),可能创建了两个对象,也可能是一个。当常量池中已经存在了“123”这个字符串,那么它只创建一个对象,否则创建两个。那么,最关键的问题来了!!!String s1 = new String("12")+"3",它创建了几个对象????

5个回答

Small_Mouse0
Small_Mouse0   Ds   Rxr 2017.08.29 09:54

【String s1 = new String("12")+"3"】,,可以拆分为两句

        String s3 = new String("12");
        String s4 = s3+"3";

会牵扯三个对象,,
"12",这个会产生一个对象,只不过这个对象没显示的表现出来。
new String("12"),这个也会产生一个对象,传入的"12"是个对象
s3+"3",,还会产生一个对象。

图片说明

上图仅供参考,,如有问题还可追问,,(个人见解,如有错误,可以讨论)

q975583865
q975583865 666
3 个月之前 回复
foxyao_it
foxyao_it   2017.08.29 09:04

String s=new String("123");
String s1 = new String("12")+"3";
System.out.println(s==s1);
System.out.println(s=="123");
结果:
false
false

是2个对象

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2017.08.29 09:01

Java字符串是存储在 常量池还是在堆中,这个问题都被问烂了,但是如果想要真正理解,还是需要看JVM底层的知识的。
我以前弄懂过,又忘了。我印象中是创建了两个对象引用,一个指向s1,一个是无名对象new String("12")

huang931027
huang931027   2017.08.29 09:32

你这样想,new一个新对象他就有了一个自己的物理地址。这个问题确实都被问烂了,百度出来都一大片,何必在这里问

weixin_37408595
weixin_37408595   2017.08.29 10:50

答案应该是两个,s,s1,s2只是引用,不是对象!对象就是“3”和“12”,字符串自己本身才是String对象。
String s = new String("3");
这样只是声明了一个指向String对象“3”的一个引用s(同时也创建了对象“3”)。

weixin_37408595
weixin_37408595 忘了还有一个对象“123”,是“3”+“12”出来的。
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片