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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

阅读权限: 1

1jpg.jpg

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

没看出什么不同啊...

没看出什么不同啊...

24 个回复

倒序浏览
本帖最后由 fantacyleo 于 2014-9-7 12:10 编辑

这个说复杂也复杂,说简单也简单。像"世界杯"、"世界"+"杯"这些叫做字符串字面值,其本质是常数,是你用javac编译时就能确定下来的值。也就是说javac编译时就可以知道"世界"+"杯"的值是"世界杯"。Java语言规范要求:相同的字符串字面值必须指向同一个String对象,因此s1和“世界”+“杯”都指向同一个String对象——"世界杯",s1==“世界”+“杯”自然也就是true啦。而s2+s3呢?s2和s3都是变量,s2+s3的值在编译时无法确定,必须等到程序运行时才能通过相应的指令计算出来,而运行时计算出来的s2+s3,虽然它的值也是"世界杯",可这个String对象和编译时的String对象不是同一个,存储的内存位置不同,因此s1==s2+s3为false

点评

回答的很详细,赞一个!  发表于 2014-9-7 21:00
回复 使用道具 举报 1 0
看一楼,回答的很详细了
回复 使用道具 举报

看一楼,回答的很详细了,还有比较两个字符串是否相等,可以用equals方法,==号比较的是对象的地址值
回复 使用道具 举报
因为他们指向的内存地址不一样,,,所以......................
回复 使用道具 举报
一楼搞得真明白
回复 使用道具 举报
你这种对比字符串的方式不对。
如果是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比较的才是真正的内容
回复 使用道具 举报
一楼说得好!
回复 使用道具 举报
一楼很厉害!不错!很清楚!
回复 使用道具 举报
s1=“世界”+“杯”这是代表字符串世界和杯相加就是世界杯
所以为true
但是s2+s3=指向的对象和s1指向的对象是不一样的所以是false
回复 使用道具 举报
一楼回答果然专业,虽然有点没看懂;P
回复 使用道具 举报
1楼乃真大神也
回复 使用道具 举报
一楼解释的已经很清楚了。
回复 使用道具 举报
一楼威武···学习了
回复 使用道具 举报
一楼厉害
回复 使用道具 举报
你把
s2和s3都加上final就可以了。
回复 使用道具 举报
clh 中级黑马 2014-9-7 15:58:31
17#
学学习习
回复 使用道具 举报
一楼的回答貌似很高深啊
回复 使用道具 举报
fantacyleo 发表于 2014-9-7 02:20
这个说复杂也复杂,说简单也简单。像"世界杯"、"世界"+"杯"这些叫做字符串字面值,其本质是常数,是你用jav ...

说的明白,学习了
回复 使用道具 举报
String 类型作为引用数据类型,在使用(==)进行比较时,比较的是对象的引用(这一点和基本数据类型不一样),如果要比较字符串的值是否相等,应该使用equals 方法。(“世界”+“杯”)是在编译期间完成的)。所以s1==(“世界”+“杯”);而s2+s3,是在运行期间完成的,表面上看起来其值也为“世界杯”,但这个“世界杯”是s2+s3两个变量运算的结果,是需要在内存地址中重新分配空间的。一旦从新分配内存空间,肯定对象引用的值也就会发生改变,所以s1==(s2+s3)的结果为false。如果还不是很明白,可以参看这篇文章:http://blog.csdn.net/kofsky/article/details/1882626
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马