读书人

String常量有关问题

发布时间: 2012-12-27 10:17:09 作者: rapoo

String常量问题
String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s3 == s2); //打印FALSE
说明s3和s2指向不同的字符串对吗,不是说常量池中的字符串不会重复创建吗,就是说"ab"应该好像只有一份,这里不是重复创建了吗 ?


放在常量池中的都是编译期间就确定的,比如你这里面的s1和s3,但是对于s2来说,是不能再编译时确定其值的,因为s1是一个变量。只能在运行的时候才可以,所以s2会被分配到一个堆里,这样就有两份"ab",一个在常量池里,一个在堆里。如果你想最后打印的是true的话,你可以把s1声明为final类型的,这样s2在编译的时候就能确定其值了,这样常量池中就有一个"ab".

读书人网 >编程

热点推荐