为了账号安全,请及时绑定邮箱和手机立即绑定

字符串常量池里面没有“abc”为什么下面输出的结果为false,true

字符串常量池里面没有“abc”为什么下面输出的结果为false,true

不落的代码 2017-03-28 23:39:58
public class Test { public static void main(String[] args) {  String s1 = new String("abc");  String s2 = s1.intern();  System.out.println(s1==s2);这里为什么输出false  String s3 = "123";  String s4 = s3.intern();  System.out.println(s3==s4); }}
查看完整描述

3 回答

?
__YXQ__

TA贡献48条经验 获得超15个赞

“”定义的字符串对象存储于常量池中,new 出来的字符串对象存储于堆中
而==比较的是字符串的引用地址

String s1 = new String("abc");//"abc"首先在常量池里创建,new执行时在堆中创建对象,把常量池中的"abc"复制到堆中
s2 = s1.intern();//等同于s2 = "abc";
s2!=s1;


查看完整回答
1 反对 回复 2017-03-29
?
肥冰

TA贡献101条经验 获得超60个赞

new出来是对象,进栈空间,不会自动入池。
查看完整回答
反对 回复 2017-03-29
?
ziom

TA贡献948条经验 获得超1109个赞

S有intern()方法吗,还真没注意过。。。

查看完整回答
反对 回复 2017-03-29
  • 3 回答
  • 1 关注
  • 2292 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信