Object类九大方法之equals方法

Object类九大方法之equals方法

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

public boolean equals(Object obj){
    return this=obj;
}

Object中的equals方法是判断this和obj本省的值是否相等,即用来判断调用equals的对象和形参obj所引用的对象是否为同一个对象,所谓的同一个对象就是指内存中同一块储存的单元(地址值)如果this和obj指向的是同一块内存对象,则返回ture,如果this和obj指向的不是同一块内存,则返回false.

需要注意的是:即便是内容方完全相同的两块不同的内存对象,也返回false.因为比较的是地址值.

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

首先了解一下java内存的只要划分
在这里插入图片描述
堆:存放的是New出来的对象,此对象由垃圾收集器收集,垃圾集器针对的就是堆区.

栈:每调用一个方法,会创建一个栈帧,存放局部变量.

方法区:类的所有信息,包括所有的方法,静态变量,常量.

通过下面的代码我们加深一下equals和=的区别:

public class Equals{
    public static void main(String[]args){
        String s1="apple";
        String s2="apple";
        System.out.print(s1==s2)//true,比较的是对象的地址值,因为两个对象都存在常量池中所以为true
        System.out.print(s1.equals(s2))//true,因为此Equals是Object的方法比较的是内容所以为true
        String s3=new String("apple");
        String s4=new String("apple");
        System.out.print(s3==s4);//false,地址值不一样
        System.out.print(s3.equals(s4));//true,因为此Equals是Object的方法比较的是内容所以为true
    }
}
结论:
"== "比较的是变量(栈)内存中存放的对象的内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象
“equals”:不能做基本类型的比较,引用类型如果不重写比较的是地址值,重写之后比较的是内容.
从内存的划分我们来理解这个区别
String s1=new String("apple");
String s2=new String("apple"); 
System.out.println(s1==s2);  //false 
System.out.println(s1.equals(s2));  //true  

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

String s1="apple";
String s2="apple";
System.out.println(s1==s2);//true
System.out.println(s1.equals(s2));//true

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TimeFriends

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值