扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:佚名 来源:赛迪网 2007年11月18日
关键字:
在本页阅读全文(共2页)
下面进一步探讨,什么样的string + 表达式会被编译器当成常量表达式?
String b = "a" + "b"; |
这个String + String被正式是ok的,那么string + 基本类型呢?
|
可见编译器对string + 基本类型是当成常量表达式直接求值来优化的。
再注意看这里的string都是"**"这样的,我们换成变量来试试:
String a = "ab"; |
这个好理解,"a" + bb中的bb是变量,不能进行优化。这里很很好的解释了为什么3的观点不正确,如果String+String的操作是在运行时进行的,则会产生新的对象,而不是直接从jvm的string池中获取。
再修改一下,把bb作为常量变量:
String a = "ab"; |
竟然又是true,编译器的优化好厉害啊!呵呵!考虑下面这种情况:
String a = "ab"; |
看来Java(包括编译器和jvm)对string的优化,真的是到了极点了,string这个所谓的“对象”,完全不可以看成一般的对象,Java对string的处理近乎于基本类型,最大限度的优化了几乎能优化的地方。
另外感叹一下,string的+号处理,算是Java语言里面唯一的一个“运算符重载”(接触过c++的人对这个不会陌生)吧?
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者