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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Θ动@咚Θ 中级黑马   /  2013-11-11 18:05  /  1291 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class A{
  2.   public static void main(String []args){
  3.    Person a=new Person();
  4.    Person b=new Person();
  5.    System.out.println(a.equals(b));
  6. }
  7. }
复制代码
这里输出结果是false。把代码中equels换做==,也是false。如果把代码中对象b的实例化改为 Person b=a;那么无论下面用equals还是==输出都是true。这里的例子看出来这两者判断没啥区别啊,求指教、、、、

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

6 个回复

倒序浏览
当对象用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们的比较后的结果为true,否则比较后结果为false。
进行用equals比较,在没有覆写Object中equals方法的情况下,他们之间的比较还是基于他们在内存中的存放位置的地址值的

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
==是一个比较运算符   equals是一个方法
==基本(比较值),引用(比较地址值)数据类型都可以使用   而equals只能用于引用
如果某个数没有重写object的equals方法,  那么比较引用数据类型,==和equals方法是一样的结果
如果重写了object这个类的equals方法,基本上都是比较的内容
比方说比较2个人  不在是比较地址值 而是比较年龄  身高这些属性

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
剑魂 发表于 2013-11-11 18:13
当对象用(==)进行比较的时候,比较的是他们在内存中的存放地址,所以,除非是同一个new出来的对象,他们 ...

哦 也就是说不重写equals方法的话,本身拿equals方法作比较和==是一样道理的,没什么意义。重写了之后就拿equals方法来对对象中的内容进行比较,这样才有意义。谢谢哥们!
回复 使用道具 举报
wjj410830911 发表于 2013-11-11 18:23
==是一个比较运算符   equals是一个方法
==基本(比较值),引用(比较地址值)数据类型都可以使用   而equ ...

嗯 我悟了 谢谢哥们了!
回复 使用道具 举报
以后如果问题解决了,可以自己编辑帖子,修改主题为“提问结束”。
回复 使用道具 举报
==比较的是八种基本数据类型,比较的是实实在在的值;
equals 则比较的是创建的实例对象.
Person a=new Person();当你New一个Person的实例的时候赋给变量a 的值其实是一个hashcode值,这个值相当于就相当于c语言当中的指针,但是JAVA当中没有指针的概念,JAVA当中称之为"引用"。当你a.equals(b)的时候比较的就是两个实例对象,因为你new 的是两个对象所以结果是false, 而a==b则是比较两个对象的引用因此也是false;
而当你 Person b=a;的时候 是把 a的引用赋值给了b,s所以 进行 "=="比较运算时比较的是引用 二者相同,则结果是true,而进行equals则比较的是实例对象,因为二者引用都指向堆内存中的同一个对象,所以结果为true.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马