黑马程序员技术交流社区

标题: equals和“==”问题 [打印本页]

作者: 子康JAVA    时间: 2013-6-5 23:31
标题: equals和“==”问题
equals“==”有什么区别,分别在什么情况下使用?

作者: yp324    时间: 2013-6-5 23:48
==是判断两个变量或实例是不是指向同一个内存空间
equals是判断两个变量或实例所指向的内存空间的值是不是相同
eqauls 与 = =之异同
1)比较方式角度:
= =是面向过程的操作符;equals是面向对象的操作符
= =不属于任何类,equals则是任何类(在Java中)的一个方法;
我们可以1)Primitive1 (基本类型)= = Primitive2(基本类型);
          2)Object Reference1(对象引用)= = Object Reference2(对象引用)
          3)Object Reference1 (对象引用) .equals(Object Reference2 (对象引用))
            这三种比较
            但却不能Primitive1 (基本类型).equals( Primitive2(基本类型));
对于基本类型,没有面向对象中发送消息一说,自然也不会有
方法成员。
2)比较目的角度:
1)     如果要比较两个基本类型是否相等,请用= =;
2)     如果要比较两个对象引用是否相等,请用= =;
3)     如果要比较两个对象(逻辑上)是否一致,请用equals;

作者: 黄辉    时间: 2013-6-6 02:16
==和equals最大区别是“==”在判断两者是否在同一个内存空间,而equals是一种多用于引用类型判断值是否相等的。
所以==多用于基本数据类型的比较,equals多用于引用数据类型的比较。

作者: 穆爱明    时间: 2013-6-6 07:40
==和equals()方法都可以用来判断字符串,但所判断的内容是有差别的。简单说,==判断的是两个字符串对象在内存中的首地址,就是判断是否是同一个字符串对象,而equals()方法判断的是两个字符串对象的值是否相等。例如:
  1. String str1 = new String("我是黑马人");
  2.                 String str2 = new String("我是黑马人");
  3.                 if (str1 == str2) {
  4.                         System.out.println("两个字符串相同");

  5.                 } else {
  6.                         System.out.println("两个字符串不同");
  7.                 }
  8.                 if (str1.equals(str2)) {
  9.                         System.out.println("两个字符串值相同");
  10.                 } else {
  11.                         System.out.println("连个字符串值不同");
  12.                 }
复制代码
输出结果:两个字符串不同
         两个字符串值相同
看论坛帖子:http://bbs.itheima.com/forum.php ... mp;page=1#pid340597
作者: 紫衣侯    时间: 2013-6-6 08:56
在除string类的其他类中,== 和equals 并无区别都是比较内存地址,因为==是比较内存地址,而它们的equals方法都是继承的object类的equals方法,object的equals方法也是==实现的。而 string类重写了 equals方法,所以可以比较值的相等。只要记住这一点就行了
作者: 桉树    时间: 2013-6-6 12:32
== 是比较是否是同一个内存地址。而equals方法则是根据重写 Object 类中的equals 方法,来实现特定值的比较。
如:
String a = "abc" ;
String b = new String("abc") ;
如果a == b 则 为false, a.equals(b) 则为true;
作者: Hyo_Ri    时间: 2013-6-6 15:22
== 在比较基本类型的变量时是比较值是否相等,如果比较的对象时引用类型则比较的是否指向同一对象,也就是比较是否是同一内存地址;我们常用的是String类的equals方法,它重写 了Object 类中的equals 方法,只要比较的两个对象的值相等就返回true。

作者: 赵熠东(赵东东)    时间: 2013-6-6 20:43
一般来说equals是比较两个对象的值是否相等,==是比较两个引用是否指向同一个对象,有点印象就行,做东西出错的时候就明白怎么回事了。
作者: iamlch@qq.com    时间: 2013-6-6 21:46
equals:比计较对象的内容
作者: 张禄宇    时间: 2013-6-9 13:18
==是判断引用是否相等  equals是比较值 是否相等
作者: 袁梦希    时间: 2013-6-9 15:09
楼主你好  如果帖子的问题已经解决,请把帖子的类型改为“已解决”。{:soso_e102:}
作者: 袁梦希    时间: 2013-6-9 15:09
桉树 发表于 2013-6-6 12:32
== 是比较是否是同一个内存地址。而equals方法则是根据重写 Object 类中的equals 方法,来实现特定值的比较 ...

加油  小鬼
作者: 黑马王瑞    时间: 2013-6-11 17:29
==是比较两个引用是否是指向同一个内存空间,而equals是比较两个对象的值是否一样,这种情况大部分出现在String中.只要记住判断值是否相等的时候用equals就可以了.
作者: Changer_s    时间: 2013-6-12 12:35
http://blog.csdn.net/u010859707/article/details/9078741
我写的,应该对你理解有很大帮助
作者: 郭天龚    时间: 2013-6-12 15:45
== 判断两个对象的地址值是否相等,
而equals多用于引用数据类型的比较。在字符串中equals方法原来比较两对象的字符序列是否相同。
其实这个方法是重写Object类中的equals方法,所以这个方法在对于不同类型的对象中,他比较的内容也是不同的。
比如你定义了一个Person类,覆盖了equals方法来判读两个是是否为同一个人,判断的条件是,姓名和年龄相同为同一个人。
而别人也定义了一个person类,人家判断的条件是,姓名相同,年龄相同。出生地相同才算同一个人。
所以对于equals方法呢要看对于什么类型的对象。
作者: 袁梦希    时间: 2013-6-12 19:26
楼主你好  如果问题已经解决  请把帖子的类型改为已解决  然后会给你发几个粽子吃




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