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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wayonEmes 中级黑马   /  2015-7-28 10:42  /  3009 人查看  /  39 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 wayonEmes 于 2015-8-13 23:35 编辑

String s1 = "Hello";
String s2 ="World";
String s3 ="HelloWorld";
System.out.println(s3==s1+s2);

39 个回复

倒序浏览
如果你能回答
System.out.println(s3.equals(s1+s2));
为什么是true的话你就知道了!
回复 使用道具 举报
halohoop 发表于 2015-7-28 10:49
如果你能回答
System.out.println(s3.equals(s1+s2));
为什么是true的话你就知道了!

这个我知道啊,是String类重写了Object中的equals方法,比较的是字符串的值
==好像是比较的地址值,可是为什么String s1 ="hello";String s2="hello";
输出s1==s2的结果是true而这个的结果是false呢
回复 使用道具 举报
s3==s1+s2
s3== "Hello"+"World"
这俩你知道了么,你可以试试   还有反编译看下  自己看出来的才是最理解的
回复 使用道具 举报
122125241 发表于 2015-7-28 11:05
s3==s1+s2
s3== "Hello"+"World"
这俩你知道了么,你可以试试   还有反编译看下  自己看出来的才是最理解的 ...

好的 ,谢谢啦
回复 使用道具 举报
BugKing 来自手机 中级黑马 2015-7-28 11:10:27
地板
[quote]wayonEmes 发表于 2015-7-28 10:42
String s1 =

看过,水一个
回复 使用道具 举报
这个问题看似简单还真有些深度
回复 使用道具 举报
看着好难,努力学习中
回复 使用道具 举报
==比较的是对象的地址,只要知道==右边是否是一个新的不同于s3的对象就行了,s1+s2是两个变量相+,这是编译期无法确定,只有在运行期才能确定,所以这个生成了新的对象。如果换成两个常量相+,编译期就能确定,指向常量池的一个对象引用,所以System.out.println(s3 == "Hello" + "World");//结果一定是true。另外还有new一定生成新对象。
回复 使用道具 举报
貌似是地址值的比较。。。
回复 使用道具 举报
学习了,,,
回复 使用道具 举报
我也是今天刚学的。楼主是在传智上课的吗?
老师讲S1+S2时要创建对象,所以地址值不同,用==号比较的时候比较地址值,所以不一样
回复 使用道具 举报
==是用來比较对象的地址,
結果是s3的地址不等於s1+s2
回复 使用道具 举报
不懂,来学知识的。。。
回复 使用道具 举报
学习学习,,,
回复 使用道具 举报
== 比较的是对象的地址值
回复 使用道具 举报
加油,想想未来的美好生活,你就有动力了
回复 使用道具 举报
s是引用型变量,==比较的就是实际地址啊
回复 使用道具 举报
字符是连接吧,怎么比较?
回复 使用道具 举报
zhaoyue 发表于 2015-7-28 21:27
我也是今天刚学的。楼主是在传智上课的吗?
老师讲S1+S2时要创建对象,所以地址值不同,用==号比较的时候比 ...

对啊,就是在传智啊,不过我用反编译编译出来右边是一个StringBuilder
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马