黑马程序员技术交流社区

标题: == 和 equals 怎么区别与理解? [打印本页]

作者: -律-    时间: 2014-12-13 00:43
标题: == 和 equals 怎么区别与理解?
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




作者: 杨佳名    时间: 2014-12-13 00:46
http://bbs.itheima.com/thread-156962-1-1.html这个帖子,应该可以解决你所有的疑惑。哪里不明白再提出来
作者: -律-    时间: 2014-12-13 00:48
杨佳名 发表于 2014-12-13 00:46
http://bbs.itheima.com/thread-156962-1-1.html这个帖子,应该可以解决你所有的疑惑。哪里不明白再提出来 ...

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

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





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