String 常量池的一些注意事项_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > String 常量池的一些注意事项

String 常量池的一些注意事项

 2011/10/14 9:38:46  qqchinaok  http://qqchinaok.iteye.com  我要评论(0)
  • 摘要:我们都应该知道,new出来的对象会放在堆中分配空间,string也是一样:strings=newstring("s");而string直接引用的值都放在常量池中,但对string类型的“+”运算值得弄清楚:publicstaticvoidtest1(){strings="ab";stringa="a"+"b";system.out.println(s==a);//这里true。}jvm对字符串常量的"+"运算,在编译期完成。在常量池中的值赋给各个变量的引用!在编译期即把字符串常量的值确定下来
  • 标签:注意事项 事项
    我们都应该知道,new出来的对象会放在堆中分配空间,string 也是一样:string s = new string("s");
    而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 ! 
上一篇: ASM指南翻译-7 下一篇: 何去何从啊!
发表评论
用户名: 匿名