public static void main(String[] args) {
String s3 = "你好吗";
String s4 = "你";
String s5 = "好吗";
System.out.println(s3==(s4+s5));
//s4+s5也是在字符串常量池中 为什么输出的是false?
}
public static void main(String[] args) {
String s3 = "你好吗";
String s4 = "你";
String s5 = "好吗";
System.out.println(s3==(s4+s5));
//s4+s5也是在字符串常量池中 为什么输出的是false?
}
s4+s5不在字符串常量池,它只是和常量池的“你好吗”正好相等。
为什么常量池已经有你好吗,这里还要再弄一个你好吗,两个不同的字符串?
这个你要理解,常量池的出现的目的,主要是加速程序的运行,在编译阶段能确定的字符串,先统统算出来,直接摆在程序里。
而运行的时候算出来的值,如果先查找下是不是常量池有没有,有的话引用常量池,那么这样做内存是节约了,但是性能反倒很差。
所以如果你是jvm的设计者,你应该怎么做?当然是不去判断是否存在,重复就重复好了。