java 对象 equals_Java Object类的equals()方法

所有类都从Object类中继承了equals方法,Object类中equals方法源代码如下:

publicbooleanequals(Objectobj)

{

returnthis== obj;

}

Object中的equals方法是直接判断this和obj本身的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否是同一对象,所谓同一对象就是指内存中同一块存储单元,如果this和obj指向的是同一块内存对象,则返回true,如果this和obj指向的不是同一块内存,则返回false,注意:即便是内容完全相等的两块不同的内存对象,也返回false。

那么equals()方法与之前的“==”有什么区别呢?

在进行演示代码之前先来了解一下Java内存的主要划分,可以帮助我们更好地理解下面的实例演示。

0936aa9d743c4179e2d9b061d14fcf43.png

Java虚拟机里的堆区要存放new出来的对象,栈区存放局部变量,而方法区包含了类的所有信息,包括所有的方法,静态变量,常量等。

通过以下实例我们来加深一下equals与,代码如下:

publicclassEquals{

publicstaticvoidmain(String[] args){

String s1="apple";

String s2="apple";

System.out.println(s1==s2);    //true

System.out.println(s1.equals(s2));    //equals比较的是内容,true

String s3=newString("apple");

String s4=newString("apple");

System.out.println(s3==s4);  //false

System.out.println(s3.equals(s4));  //true

}

}

从上面的实例可以看出,“==”比较的是两个引用的对象是否相等,而equals()方法比较的是两个对象的实际内容。我们结合上面的内存的划分来理解这个区别。

Stringstr1=newString("apple");

Stringstr2=newString("apple");

System.out.println(s3==s4);  //false

System.out.println(s3.equals(s4));  //true

上述几行代码内存分析如下图所示:

c1eb0808a18f03c0a0b47fdd8b992097.png

因为“==”比较的是两个引用的对象是否相等,从上图很容易看出来不等,所以System.out.println(s3==s4),结果为False;而equals()方法比较的是两个对象的实际内容,从图中可以看出s3和s4都指向apple,内容是相同的,所以System.out.println(s3.equals(s4)),结果为True。

再来看

Strings1="apple";

Strings2="apple";

内存分析如下图:

86966788e39c2d96fbf2911363506aeb.png

很容易看出System.out.println(s1==s2)的结果为True。

wx搜索“程序员考拉”,专注java领域,一个伴你成长的公众号!

1267092-20200421110647598-808130246.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值