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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© -律- 中级黑马   /  2014-12-13 00:43  /  1894 人查看  /  16 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class StringTest4 {        public static void main(String[] args){
                String s1 = "hello";
                String s2 = "world";
                String s3 = "helloworld";
                String s4 = "hello"+"world";
                String s5 = s1 + s2;
                System.out.println( s3 == s4); //返回true;
                System.out.println( s3 equals (s4) ); //返回true;
                System.out.println( s3 == s5); //返回false;
                System.out.println( s3 equals (s5) ); //返回true;
        }
}
这题我没怎么弄明白
我的问题是 == 和 equals 有什么不同,打印体3为什么会返回false,内容一样啊,难道因为中间的+号连接符?
我比较模糊的记忆是 == 是比较内存地址,equals是比较内容,不知道是否记错,主要还是想知道s3==s5为什么返回false



评分

参与人数 1黑马币 +3 收起 理由
杨佳名 + 3

查看全部评分

16 个回复

倒序浏览
http://bbs.itheima.com/thread-156962-1-1.html这个帖子,应该可以解决你所有的疑惑。哪里不明白再提出来
回复 使用道具 举报 1 0
杨佳名 发表于 2014-12-13 00:46
http://bbs.itheima.com/thread-156962-1-1.html这个帖子,应该可以解决你所有的疑惑。哪里不明白再提出来 ...

谢谢你的帮助:)我去看看先
回复 使用道具 举报
我的理解是,如果是基本数据类型之间的比较就用“==”,比较的是他们数值的大小,而对引用数据类型用“==”进行比较的话,是对他们的内存地址进行比较的,所以除非是同一个new出来的对象,比较结果是true,否则比较结果就是false
回复 使用道具 举报
清诗纪事 发表于 2014-12-13 01:04
我的理解是,如果是基本数据类型之间的比较就用“==”,比较的是他们数值的大小,而对引用数据类型用“==” ...

那么对于引用数据类型使用 == 比较是很不实用的,毕竟我们往常一般比较的是内容,而不是内存地址,感谢你的回答
回复 使用道具 举报
因为s5的地址是s1的,当然与s3的地址不一样了
回复 使用道具 举报
a371166028 来自手机 中级黑马 2014-12-13 09:53:14
7#
用==对比的是对象,所以没啥意义
回复 使用道具 举报
==比较的是地址  equals比较的是内容  这点没有错
回复 使用道具 举报
==比较的是地址 equals比较的是内容  这点没错
你搞清楚地址存的是什么就可以搞定s3==s4了
s5的话  因为s2和s1是两个变量  计算机在编译的时候并不知道具体存的是什么所以会重新开辟空间 故会地址不同
回复 使用道具 举报
看来我们是一个班的,s5是由两个变量相加得来的,JVM不知道
回复 使用道具 举报
这一点我也比较 疑惑
回复 使用道具 举报
其实是定义时指针指向的问题
回复 使用道具 举报
AnElse 中级黑马 2014-12-13 16:39:24
13#
  String s5 = s1 + s2;它们相加在内存开辟了一个新空间来存放s1+s2的值,所以肯定和s3不一样,不同的内存
回复 使用道具 举报
wtjohn 中级黑马 2014-12-13 17:40:52
14#
一个是对比内容,一个是比较内存地址
回复 使用道具 举报
这个问题我还没有学到,现在看看明白了!
回复 使用道具 举报
==  在整数还有字符是比较内容,在变量是比较引用地址,equals是java object类中的方法,字符串中默认是比较内容,写函数时一般会覆写equals方法,自定义比较内容。希望对你有帮助
回复 使用道具 举报
relice 中级黑马 2014-12-13 22:52:09
17#
==  是对两个对象的地址值比较(单一的属性)
euqals 是对两个对象的内容进行比较(对象的内容有多个属性)
如:
    String a = "Demo";
   a.equals("Demo"); //true 因为equals这里获取的是a的对象内容,所以 true
a == "Demo";  //false 因为==这里获取的是a的地址值,而"Demo"是对象,所以没法比
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马