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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Sakuratossi 中级黑马   /  2014-8-29 21:12  /  988 人查看  /  2 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

回顾之前的知识的时候对equals方法和直接==的比较方法感到很疑惑,不知道哪个是比较对象的值哪个是比较地址。
特别是String类的这个例子,
str1 = "abc",
str2 ="abc"
str3 = new String("abc");
str1 == str2      结果 true,
str1.equals(str2)  结果 true
str1 == str3    结果  false。
str1.equals(str3)  结果 true

查资料后理解为,  == 是比较对象是否相等,即比较对象在内存中的地址是否相等。
equals是比较两个对象的值是否相等,在Object类中equals方法默认比较的是对象的地址,此时的equals和==是一致的。
而String类重写了Object类中的equals方法,比较的是两个字符串对象的本身代表的字符串的值是否相等。
str1 和str2指向了“abc”这个对象,所以它们的地址是相等的, 而str3新建了一个对象,虽然值相等,但是地址却不等。

各方面寻找解释,总结如下:

一:java 中所有的类都是Object 的子类,都继承了Object类中的equals方法。

二:
(1)八大基本类型只能用"=="比较不能用equals比较。
(2)对于基本类型的包装类型,比如Boolean、Character、Byte、Shot、Integer、Long、Float、Double等的引用变量,==是比较地址的,而equals是比较内容的。
(3)对于字符串变量来说,使用“= =”和“equals()”方法比较字符串时,其比较方法不同。
“= =”比较两个变量本身的值,即两个对象在内存中的首地址。
“equals()”比较字符串中所包含的内容是否相同。

三:重写equals 方法是为了方便比较,自己怎么定义就怎么比较。按java 代码规范来说,bean 类里面,一般要重写三个方法 1、hashcode(),2、equals(),3、toString().

object.equals(null),“equals()”方法是比较“值”是否相等;
object==null,“==”比较运算符是用来比较“对象”是否是同一个。


说的简单一点java是面向对象的编程语言:
如果new了一个对象,那么它就有值,它的值可以是“null”;
如果根本就没有new这个对象,那它就不存在,没有办法进行比较,就会出现空指针的异常。

举个例子:

Object object1=new Object();
Object object2=new Object();
Object object3;

object1.equals(object2);//false
object1==object2;//flase
object3==object2 ;//就要报错,因为object3还未开辟内存,object2不知道指向谁取进行比较。

也就是说,每次new一个对象都是新开辟一块内存,它们分别站在不同的位置上进行比较,equals是比较他们的值,而==相当于比较它们的位置!

2 个回复

倒序浏览
总结的很好,值得学习!
回复 使用道具 举报
走过看过,复习一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马