Java String intern方法

David_zhangA 2017-07-13 07:50:33
直接上代码

public static void main(String[] args) {
String str1 = new StringBuffer("ja").append("va").toString();
System.out.println(str1.intern() == str1);

String str2 = new StringBuffer("computer").append("test").toString();
System.out.println(str2.intern() == str2);
}


运行结果如下:
...全文
278 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
David_zhangA 2017-07-21
  • 打赏
  • 举报
回复
引用 6楼Sun1956 的回复:
参考R大的这个帖子,已经说的很清楚了 https://www.zhihu.com/question/51102308/answer/124441115
结贴,收分
ps45221 2017-07-19
  • 打赏
  • 举报
回复
参考R大的这个帖子,已经说的很清楚了 https://www.zhihu.com/question/51102308/answer/124441115
David_zhangA 2017-07-18
  • 打赏
  • 举报
回复
引用 3楼xiaovhao 的回复:
我的理解是,常量池本身就已经有"java"这个字符串,所以str1.intern()引用的是常量池的,所以才会返回false,我试了int,float返回的也都是false
如果是有类似这样的字符串,怎么证明该类字符串的存在
XuanrenLu 2017-07-13
  • 打赏
  • 举报
回复
引用 3 楼 u014038116 的回复:
我的理解是,常量池本身就已经有"java"这个字符串,所以str1.intern()引用的是常量池的,所以才会返回false,我试了int,float返回的也都是false
楼上正解,编译器把源代码编译成class文件,里面有字符串常量部分,会包含一些常用的字符串,比如java,classloader加载class文件的时候,这部分常量串被加载到字符串常量池。所以第一个返false, 第二个返回true,运行环境应该JDK1.7及以上,调用intern的时候,如果常量池没有该字符串,就把当前字符串引用放入常量池。
xiaovhao 2017-07-13
  • 打赏
  • 举报
回复
我的理解是,常量池本身就已经有"java"这个字符串,所以str1.intern()引用的是常量池的,所以才会返回false,我试了int,float返回的也都是false
David_zhangA 2017-07-13
  • 打赏
  • 举报
回复
我晕,手快了~~~为什么两个结果不一致
David_zhangA 2017-07-13
  • 打赏
  • 举报
回复
忘记说问题了~~~~

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧