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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wangchao1686 中级黑马   /  2013-12-8 12:36  /  1379 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

输出结果为false 和true,我知道使用+可以连接字符串。但是结果问什么是这样呢。我的理解是都应该是true啊。
  1. public class test {
  2.   public static void main(String[] args)
  3.   {
  4.         String s1="a";
  5.         String s2=s1+"b";
  6.         String s3="a"+"b";
  7.         String s4="ab";
  8.         System.out.println(s2==s3);
  9.         System.out.println(s4==s3);
  10.   }
  11. }
复制代码

6 个回复

倒序浏览
该问题传送门:http://bbs.itheima.com/thread-100725-2-1.html
建议楼主有时间群览所有帖子,你一定会学到不少。
回复 使用道具 举报
1.String比较特殊,之前的s1是在【栈】中,属于变量;s2属于对象,因为String不可以增加或者删减在创建后,所以s1+“b”的结果是相当于创建了个String对象s2,此时s2存在于【堆】中,所以说,2者不同。
2.== 比较的是对象是否相等,也就是说地址,不同的对象肯定是不同的地址了。所以是false。如果要比较值的话。可以用equals.............{:soso__3419049825043533360_4:}

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
如果你想前面一个为true,你应该这么写:System.out.println(s2。equals(s3));
因为,s2和s3是两个不同的对象,只不过存着同样的值而已,== 比较的对象的应用
很明显,他们是两个对象,所以不等。而比较对象的值使用equals方法,所以换为equals方法比较结果就会变成true;
String s1="a";
String s2=s1+"b";
其实s2的创建过程含有自动装箱和拆箱过程,对象和字符不能直接相加的,所以先将s1对象拆箱变成字符串,然后和“b”相加,再装箱成为一个对象,这也是s2和s3是两个不同对象的原因。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
String s2=s1+"b";
String s3="a"+"b";
s2和s3之所以不相同,是因为s3是在编译期间确定 在字符串池中
                                     s2实在运行时确定   会在堆内存内创建

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

回复 使用道具 举报
qq379264347 发表于 2013-12-8 12:57
该问题传送门:http://bbs.itheima.com/thread-100725-2-1.html
建议楼主有时间群览所有帖子,你一定会学到 ...

哦,这个问题有人提问了,我刚才看了,但是不能明白回复。我就是想知道草符“+”对字符串的具体操作过程。
回复 使用道具 举报
冷月 高级黑马 2013-12-8 13:40:41
7#
去论坛搜索   好多人提问过了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马