关于字符串常量池的问题
问题描述:
String s1="hello";
String s2="world";
String s3="helloworld";
System.out.println(s3.equals((s1+s2)));
存在几个helloworld?
如果此时将helloworld赋值给变量s5 则赋值的是哪一个helloworld
答
字符串常量会存在常量池里,每定义一个字符串,都会先查看常量池,如果有,就直接使用已有的,没有才定义,所以从开始到结尾只有一个helloworld。
为什么4楼的结果是false,因为比较的是c和d的地址。
如果是System.out.println("helloworld"=="hello"+"world");则是true。
答
2个helloworld
s3
答
常量字符串在常量区,多个变量都会指向它,所以对于同一个字符串,常量区只有一个
答
不明白二楼说的 string字符串不属于常量吧 这里指向很明显是不同的
答
正如二楼所说,同样的字符串在常量区只有一个。那么回答楼主的问题:1,只存在一个“helloword”字符串,变量s3指向它,变量(s1+s2)的值也指向它。2,将”helloword“赋值给变量s5,变量s5也同样指向常量区已存在的“helloworld”字符串。
答
这个是常见的面试题,你操作下看看