jvm对String常量加法的优化

今天一个同事问我一道题目

String a = "ab";
String b = "a" + "b";
System.out.println((a == b));这个的结果是什么?为什么?

String a = "ab";
String str = "b";
String b = "a" + str;
System.out.println((a == b));
这个的结果是什么?为什么?

String a = "ab";
final String str = "b";
String b = "a" + str;
System.out.println((a == b));
这个的结果是什么?为什么?

我一看觉得全都应该是false, 因为string+string会要重新创建对象嘛,这个知道的。
结果在eclipse的运行结果却是:
true
false
true
觉得十分不解, 问同事为何?
回答是:对于第一个,在JAVA代码进行编译时,JAVA编译器已经将String b="a"+"b";优化成String b="ab"; 然后,因为JVM中对字符串的操作是在栈中,所以在运行是,发现栈中已经有了"ab"所以就直接引用。故第一个是TRUE。
-----------------------------------------------------------------------
看来是jvm对常量加法有优化,在编译器能直接得到结果
对于第二个,因为str是变量,所以
String str = "b";
String b = "a" + str;
就不能优化成b="ab";

对于第三个,很明显了, str声明成了final的, 又变成了常量
所以又能简化成b="ab"了
阅读更多
文章标签: JVM Eclipse
个人分类: java
上一篇displaytag七宗罪
下一篇powerdesigner 几个基本问题
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭