黑马程序员技术交流社区

标题: 关于String的拼接 [打印本页]

作者: 学霸你在哪里呀    时间: 2015-3-26 19:37
标题: 关于String的拼接
String s3 = “你好吗”;
  String s4 =”你”;
  String s5 =”好吗”;
  System.out.println(s3==(s4+s5))   为什么输出是false?

作者: ym199210    时间: 2015-3-26 19:43
“你”“好吗” 前面不要加空格  空格是一个字符的 去掉就是true了
作者: 小七的    时间: 2015-3-26 20:05
String是引用类型,s3和(s4+s5)它们指向的引用不同,所以不相等
作者: SunshineCui    时间: 2015-3-26 20:13
好像是有空格吧
作者: rhui    时间: 2015-3-26 20:44
s4+s5是变量操作,执行后,会在开辟一个变量存储,这个时候的地址就不是s3的了,所以是false
作者: 快乐ABC    时间: 2015-3-26 21:49
引用类型用==是比较地址是否相等。应该用equals方法的
作者: 感觉    时间: 2015-3-26 22:31
本帖最后由 感觉 于 2015-3-26 22:35 编辑

==在比较基本数据类型时,是比较的值是否相同
==在比较引用数据类型时,是比较对象的内存地址值
String s3 = “你好吗”;   //在字符串常量池中 比如地址值是0x1122
  String s4 =”你”;
  String s5 =”好吗”;
”你”+”好吗”//它也指向了0x1122
在内存中和“你好吗”其实就是一个对象“你好吗”==”你”+”好吗”   true

s3==(s4+s5)                //因为是变量相加,所以是在内存中新开辟了空间,就是不同的对象了  false
作者: Grady    时间: 2015-3-26 22:52
String是引用类型,现在==比较的引用地址。所以是false,你用equals就对了
作者: 温大帅    时间: 2015-3-26 22:54
感觉 发表于 2015-3-26 22:31
==在比较基本数据类型时,是比较的值是否相同
==在比较引用数据类型时,是比较对象的内存地址值
String s3  ...

为什么变量相加就会令另外辟空间呢

作者: 感觉    时间: 2015-3-26 23:25
温大帅 发表于 2015-3-26 22:54
为什么变量相加就会令另外辟空间呢

变量是不确定的,不能像”你”+”好吗”那样直接拼接后指向”你好吗”的内存地址,
变量相加需要开辟空间后再进行操作。
作者: a1301155262    时间: 2015-3-26 23:42
引用型变量使用equals
作者: 一米一光年    时间: 2015-3-26 23:48
原生类型比较用==,对象比较使用equals
作者: lwj123    时间: 2015-3-27 11:39
我来说说吧:
String s1 = "你好吗";
String s2 = "你";
String s3 = "好吗";
System.out.println(s1 == (s2 + s3));
JVM对字符串在连接时的处理是,当两个字符串在拼接时是没有变量存在:例如:
String s4 = "aaa"+"bbb";
这样s4在编译时就能确定了,也就是s4的值就是aaabbb。所以s4 == "aaabbb"返回的ture
但是如果字符串的拼接存在变量,例如:
String s5 = "aaa";
String s6 = "bbb"+s5;
这样s6在编译时期就不能确定值,所以s6=="bbbaaaa"是返回false的

总结:只要字符串在拼接后在编译时期就能确定他的值,那么就可以进行==返回的值就是true了。
若是想让结果为true。可以在前面加上fianl,进行宏替换
String s1 = "你好吗";
final String s2 = "你";
final String s3 = "好吗";
System.out.println(s1 == (s2 + s3));
作者: 学霸你在哪里呀    时间: 2015-3-27 13:25
lwj123 发表于 2015-3-27 11:39
我来说说吧:
String s1 = "你好吗";
String s2 = "你";

明白了!!!:D:lol谢谢版主讲解
作者: 大神在何方    时间: 2015-3-27 23:16
你的S5有空格啊。加起来跟S3当然不匹配啦·多个空的字符




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2