黑马程序员技术交流社区

标题: 面试题:判断定义为String类型的s2和s3是否相等? [打印本页]

作者: xiaogui    时间: 2016-4-26 13:00
标题: 面试题:判断定义为String类型的s2和s3是否相等?
String s1 = "ab";
String s2 = "abc";
String s3 = s1 + "c";
System.out.println(s3 == s2);
System.out.println(s3.equals(s2));
补充:今天学习了这道面试题解答,视频里提及到了StringBuffer类及append方法,和toString方法的调用,请帮忙分析一下都是怎么调用的,最好帮忙给一下代码说明,谢谢。
ps:手机发帖排版不是很好,求知欲望强!



作者: xiaogui    时间: 2016-4-26 13:02
[quote]xiaogui 发表于 2016-4-26 13:00
String s1 =

大神们快点过来给菜鸟授课啦!!
作者: BackGaoz    时间: 2016-4-26 13:21
第一个false,因为用s1去+c,s1是一个变量,底层是用StringBuffer或者StringBuilder实现,会新创建一个StringBuffer或者StringBuilder对象在缓冲区,然后将s1和c用append方法连接起来,之后再用toString方法转成字符串,得到的是一个新的字符串.
第二个true.它们的内容是一样的.
作者: xiaogui    时间: 2016-4-26 14:16
BackGaoz 发表于 2016-4-26 13:21
第一个false,因为用s1去 c,s1是一个变量,底层是用StringBuffer或者StringBuilder实现,会新创建一个StringBu ...

谢谢解答,自己再理解理解。
作者: 九天玄妖    时间: 2016-4-26 14:43
String s1 = "ab";
String s2 = "abc";
String s3 = s1 + "c";
System.out.println(s3 == s2);  false
System.out.println(s3.equals(s2)); true
s3 != s2 是因为,s1是变量,相加的时候会创建对象, == 比较的是地址,String类重写了equals方法,这个方法比较的是内容
作者: 18573626921    时间: 2016-4-26 19:18
第一个False  :因为==号比较的是地址值,String 创建之后是不可改变的所以s2与S3虽然都是“abc”,但是他们不是同一个对象,所以他们的地址值是不一样的。
第二个true:因为Equels比较的是内容,很明显S2和S3都是"abc",所以是true.
作者: zzliuyang    时间: 2016-4-27 08:57
不相等比较的是地址值
作者: 精彩    时间: 2016-4-27 11:00
跟着学习一下




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