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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

String s1="世界杯";
String s2="世界";
String s3=“杯”;
为毛s1=“世界”+“杯”;为true;而s1=s2+s3;为false;
这个问题困扰好几天了都。。。想不明白始终。。。:'(,感觉没希望了呢。。。求鼓励,求安慰。。。:Q

1jpg.jpg (50.48 KB, 下载次数: 21)

阅读权限: 1

1jpg.jpg

1jpg.jpg (50.48 KB, 下载次数: 24)

没看出什么不同啊...

没看出什么不同啊...

24 个回复

正序浏览
还没看到你那呢
回复 使用道具 举报
  地址问题吧
回复 使用道具 举报
{:3_67:}、、、
回复 使用道具 举报
学习。。其实主要就是字符串的比较方法和new的问题
回复 使用道具 举报
String 类型作为引用数据类型,在使用(==)进行比较时,比较的是对象的引用(这一点和基本数据类型不一样),如果要比较字符串的值是否相等,应该使用equals 方法。(“世界”+“杯”)是在编译期间完成的)。所以s1==(“世界”+“杯”);而s2+s3,是在运行期间完成的,表面上看起来其值也为“世界杯”,但这个“世界杯”是s2+s3两个变量运算的结果,是需要在内存地址中重新分配空间的。一旦从新分配内存空间,肯定对象引用的值也就会发生改变,所以s1==(s2+s3)的结果为false。如果还不是很明白,可以参看这篇文章:http://blog.csdn.net/kofsky/article/details/1882626
回复 使用道具 举报
fantacyleo 发表于 2014-9-7 02:20
这个说复杂也复杂,说简单也简单。像"世界杯"、"世界"+"杯"这些叫做字符串字面值,其本质是常数,是你用jav ...

说的明白,学习了
回复 使用道具 举报
一楼的回答貌似很高深啊
回复 使用道具 举报
clh 中级黑马 2014-9-7 15:58:31
17#
学学习习
回复 使用道具 举报
你把
s2和s3都加上final就可以了。
回复 使用道具 举报
一楼厉害
回复 使用道具 举报
一楼威武···学习了
回复 使用道具 举报
一楼解释的已经很清楚了。
回复 使用道具 举报
1楼乃真大神也
回复 使用道具 举报
一楼回答果然专业,虽然有点没看懂;P
回复 使用道具 举报
s1=“世界”+“杯”这是代表字符串世界和杯相加就是世界杯
所以为true
但是s2+s3=指向的对象和s1指向的对象是不一样的所以是false
回复 使用道具 举报
一楼很厉害!不错!很清楚!
回复 使用道具 举报
一楼说得好!
回复 使用道具 举报
你这种对比字符串的方式不对。
如果是C++的话可以直接对比(string1==string2)
但在java中,这个代码即使在两个字符串完全相同的情况下也会返回false
Java中必须使用string1.equals(string2)来进行判断
如果:
string s1=new String("Hello");
string s2=new String("Hello");
则(s1==s2)=false 如果:
string s1="Hello";
string s2="Hello";
则(s1==s2)=true;
因为他们指向的同一个对象。
如果把其他变量的值赋给s1和s2,即使内容相同,由于不是指向同一个对象,也会返回false。所以建议使用equals(),因为equals比较的才是真正的内容
回复 使用道具 举报
一楼搞得真明白
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马