请教个问题。

为甚么输出TRUE和false呢?
全部评论
1. 因为一开始jvm运行时常量池已经内置了字面量"java"和相应的符号引用,而intern会返回相应字面量的符号引用,因此你在堆区的引用跟原本内置在运行时常量池的引用肯定是不一样的,所以返回false。 2. 而一开始jvm运行时常量池里没有“计算机软件”这个字面量,你是通过stringBuilder的append方法得到的,这跟直接new String("计算机软件")不一样,编译后jvm运行时常量池里只有字面量"计算机"跟"软件"两个字面量。而intern会将字面量"计算机软件"在运行时动态加载在运行时常量池,并复制他在堆区的引用作为其在运行时常量池的符号引号,所以返回true。
点赞 回复 分享
发布于 2017-04-17 20:28
http://blog.csdn.net/seu_calvin/article/details/52291082#comments http://www.cnblogs.com/paddix/p/5326863.html 尽绵薄之力
点赞 回复 分享
发布于 2017-04-17 21:53
同问
点赞 回复 分享
发布于 2017-04-17 19:09
测试以下用例: String str1 = "计算机网络"; String str2 = new StringBuilder("计算机").append("网络").toString(); System.out.println(str2 == str2.intern()); 输出结果为:false 注释掉第一行: //String str1 = "计算机网络"; String str2 = new StringBuilder("计算机").append("网络").toString(); System.out.println(str2 == str2.intern()); 输出结果为:true 所以,我觉得应该是java这个常量一开始就存在常量池中; 然而以上两个测试之间差异并没有弄清楚。。。
点赞 回复 分享
发布于 2017-04-17 19:57
这个问题以前就想过,和一个师兄商量了之后结论可能是java的常量池中有java关键字。也只是自己的猜测
点赞 回复 分享
发布于 2017-04-17 20:05
应该是在前面加载其他库的时候字符串常量池里面已经有“java”的引用了。其实“java.”、“jar”之类的也都会返回false.
点赞 回复 分享
发布于 2017-04-17 20:09

相关推荐

Cassifa:发的字比你都多的一律视为骗子或者想白嫖压榨实习生的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务