A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© @ne_pie尒ce 中级黑马   /  2013-11-18 14:24  /  1177 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        String s1="abc";;
        String s2=s1;;;
        String s3=s1+"";;;
        System.out.println(s1==s2);//true
        System.out.println(s2==s3);//false
解释一下为什么第二条输出false?s3指向了哪块内存?
还有一条语句结束,用了多个;;;,为什么没有编译错误?

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

3 个回复

倒序浏览
String s2=s1; 将s1的引用赋值给它 用==当然是true
String s3=s1+"";;; 这个又重新创建了一个对象。 ==是false。
String类重写了equals方法,如果你想值比较的话推荐使用equals进行比较。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
        String s1="abc";;
         String s2=s1;;;
         String s3=s1+"";;;
         System.out.println(s1==s2);//true
         System.out.println(s2==s3);//false

String s2 = s1 ,这句话是表示将s1字符串的地址给了s2,而且==符号是比较的地址,不是值

String s3=s1+"";;;  这句话你在s3后加了一个 "" 字符串,s3首先会在字符串池中找有没有相同的串,如果有则把那个字符串的地址拿到,没有就创建一个新的地址并放入值

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马