2 qq 33833831 qq_33833831 于 2016.02.17 15:29 提问

关于字符串常量池的问题
String s1="hello";
String s2="world";
String s3="helloworld";
System.out.println(s3.equals((s1+s2))); 

存在几个helloworld?
如果此时将helloworld赋值给变量s5 则赋值的是哪一个helloworld

6个回答

qq_18748427
qq_18748427   2016.02.17 16:41
已采纳

字符串常量会存在常量池里,每定义一个字符串,都会先查看常量池,如果有,就直接使用已有的,没有才定义,所以从开始到结尾只有一个helloworld。
为什么4楼的结果是false,因为比较的是c和d的地址。
如果是System.out.println("helloworld"=="hello"+"world");则是true。

qq233379516
qq233379516   2016.02.17 15:36

2个helloworld
s3

qq_23660243
qq_23660243   2016.02.17 16:22

图片说明 不明白二楼说的 string字符串不属于常量吧 这里指向很明显是不同的

qq_33833831
qq_33833831 c d本质是对象 字符串的内容的确是常量 储存在方法区的字符串常量池
接近 2 年之前 回复
qq_33833831
qq_33833831 ==比较的是地址值 String
接近 2 年之前 回复
bdmh
bdmh   Ds   Rxr 2016.02.17 15:50

常量字符串在常量区,多个变量都会指向它,所以对于同一个字符串,常量区只有一个

github_31700487
github_31700487   2016.02.17 16:36

正如二楼所说,同样的字符串在常量区只有一个。那么回答楼主的问题:1,只存在一个“helloword”字符串,变量s3指向它,变量(s1+s2)的值也指向它。2,将”helloword“赋值给变量s5,变量s5也同样指向常量区已存在的“helloworld”字符串。

Mr_dsw
Mr_dsw   Ds   Rxr 2016.02.17 21:41

这个是常见的面试题,你操作下看看

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!