码迷,mamicode.com
首页 > 其他好文 > 详细

String的一些细节

时间:2015-07-27 22:19:26      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

String 常量池问题

(1) 字符串常量的"+"号连接,在编译期字符串常量的值就确定下来, 拿"a" + 1来说,编译器优化后在class中就已经是a1。

     String a = "a1";  

     String b = "a" + 1;  

     System.out.println((a == b)); //result = true 

     String a = "atrue";  

     String b = "a" + "true";  

     System.out.println((a == b)); //result = true 

     String a = "a3.4";  

     String b = "a" + 3.4;  

     System.out.println((a == b)); //result = true

(2) 对于含有字符串引用的"+"连接,无法被编译器优化。

     String a = "ab";  

     String bb = "b";  

     String b = "a" + bb;  

     System.out.println((a == b)); //result = false

     由于引用的值在程序编译期是无法确定的,即"a" + bb,只有在运行期来动态分配并将连接后的新地址赋给b。

(3) 对于final修饰的变量,它在编译时被解析为常量值的一个本地拷贝并存储到自己的常量池中或嵌入到它的字节码流中。所以此时的"a" + bb和"a" + "b"效果是一样的。

     String a = "ab";  

     final String bb = "b";  

     String b = "a" + bb;  

     System.out.println((a == b)); //result = true

String的一些细节

标签:

原文地址:http://www.cnblogs.com/ErLiangCode/p/4681129.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!