浏览 1583 次
锁定老帖子 主题:String 常量池的一些注意事项
精华帖 (0) :: 良好帖 (0) :: 新手帖 (10) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-01
而String直接引用的值都放在常量池中,但对String类型的“+”运算值得弄清楚: public static void test1() { String s = "ab"; String a = "a" + "b"; System.out.println(s == a);//这里 true。 } JVM对字符串常量的"+"运算,在编译期完成。在常量池中的值赋给各个变量的引用!在编译期即把字符串常量的值确定下来! public static void test2() { String s = "ab"; String a = "a"; String b = a + "b"; System.out.println(s == b);//这里 false; } JVM对字符串引用的“+”运算,如果有字符串引用的存在,在编译期无法确定引用的值指向。只有在程序运行期通过动态分配并将链接后的地址赋予。 如果String a = "a" 换成 final String a = "a"那么返回的就是true。有了final修饰后,它在编译时被解析为常量值的一个本地拷贝存储到自己的常量池中或嵌入到它的字节码流中,所以和"a" + "b"是相同的效果! 注意 只有在编译期确定下来相同的值后方能 == 。这里的操作都在常量池中进行!不同于new出来的String ! 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |