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

看看输出的第一行为什么是false

看看输出的第一行为什么是false

qq_毅往情深_0 2016-03-08 20:28:47
  String a = "hello2"; String b="hello"; String c = b + 2;                String d="hello2";        System.out.println(a==c);        System.out.println(a==d);
查看完整描述

4 回答

?
慕大叔

TA贡献75条经验 获得超103个赞

这里的加是个字符连接运算符,String c = b+'2'才对吧

查看完整回答
2 反对 回复 2016-03-09
?
qq_伊人千百度_0

TA贡献5条经验 获得超0个赞

String判断是否相等可以用 .equal();  方法   直接相等的话是比较它们的地址

查看完整回答
反对 回复 2016-03-09
?
一条小咸鱼

TA贡献457条经验 获得超255个赞


//img1.sycdn.imooc.com//56df68a8000194aa19201080.jpg

求解?

查看完整回答
反对 回复 2016-03-09
  • 梦影剑魂
    梦影剑魂
    那是因为字符串具有不变性,当创建同一个字符串的时候,后台只会创建一个,如果你修改了它,才会创建另外一个。详见java入门第三季--字符串的不变性
  • Caballarii
    Caballarii
    你这和题主两种情况了,你是拿常量+1,重新申请了字符串常量,他拿变量+1,结果就是new String()的效果
  • 星际怪物
    星际怪物
    楼上说的对,编译时和运行时不同
?
无聊的缄默

TA贡献4条经验 获得超2个赞

因为String是不可变对象     c是使用 + 运算符 把 hello 和 2 拼接 而成的 新字符串对象 和  a指向的 hello2 并不是同一个String对象   使用 == 比较 是比较  值  在这里  是比较  a和c的地址值 因为 a和c不是同一个对象  所以 得到false

查看完整回答
反对 回复 2016-03-08
  • qq_毅往情深_0
    qq_毅往情深_0
    对啊,同意楼一的说法,你说的大家都知道
  • qq_毅往情深_0
    qq_毅往情深_0
    还有string在内存中有一块常量池,hello加2后他不会重新指向hello2吗,a和c的哈希码和内存地址都是一样的
  • 4 回答
  • 0 关注
  • 1638 浏览

添加回答

举报

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