==和equals的区别

一,基本数据类型

1, 基本类型没有equals方法,使用 ‘== ’比较

2,‘==’ 比较的是两个基本类型的值。

 

二,引用类型

1)未重写equals方法时,equals方法和‘==’均是比较的内存地址【不管是否重写了hashcode方法】

实验例子:

PeoPle 类:

public class PeoPle {
    private static final int  num = 1;
    @Override
    public int hashCode() {
        return num;
    }
}

测试主函数:

public class Test {

    public static void main(String[] args) {
        PeoPle peoPle = new PeoPle();
        PeoPle peoPle2 = new PeoPle();
        PeoPle peoPle3 = peoPle;
        
        System.out.println(peoPle.hashCode());
        System.out.println(peoPle2.hashCode());
        System.out.println(peoPle3.hashCode());
        
        System.out.println("==号比较不同对象结果:"+(peoPle == peoPle2));
        System.out.println("==号比较相同对象结果:"+(peoPle == peoPle3));
        
        System.out.println("equals比较不同对象结果:"+peoPle.equals(peoPle2));
        System.out.println("equals比较相同对象结果:"+peoPle.equals(peoPle3));
    }
}

输出结果:

1
1
1
==号比较不同对象结果:false
==号比较相同对象结果:true
equals比较不同对象结果:false
equals比较相同对象结果:true

 

分析:虽然,重写了hashcode方法,使得三个类的hashcode都相同,但是,新建类的内存地址不同,所以导致比较结果的差异,所以,他们在比较的时候,并不是比较的hash值。

2)String类型重写了equals方法之后 的比较结果。

 结论:‘==’号依然比较的是内存地址,而equals方法,则比较的是值。

举个例子:

public class Test {
    public static void main(String[] args) {
        String string =  new String("a");
        String string2 =  new String("a");
        
        System.out.println("equals方法比较结果:"+string.equals(string2));
        System.out.println("==号比较结果:"+(string == string2));
    }
}

输出结果:

equals方法比较结果:true
==号比较结果:false

注意:此处String采用new的方式,采用‘=’号赋值的方式,结果会不同。

举个例子:

public class Test {
    public static void main(String[] args) {
        String string =  new String("a");
        String string2 =  new String("a");
        
        System.out.println("--------new String 赋值的方式--------");
        System.out.println("equals方法比较结果:"+string.equals(string2));
        System.out.println("==号比较结果:"+(string == string2));
        
        System.out.println("--------=号赋值的方式----------------");
        String string3 = "a";
        String string4 = "a";
        System.out.println("equals方法比较结果:"+string3.equals(string4));
        System.out.println("==号比较结果:"+(string3 == string4));
    }
}

输出结果:

--------new String 赋值的方式--------
equals方法比较结果:true
==号比较结果:false
--------=号赋值的方式----------------
equals方法比较结果:true
==号比较结果:true

分析:‘=’ 号赋值的方式,如果对象池中,已经有了相同的字符串声明式,就不会再分配空间了。所以,使用‘=’号赋值,String对象是指向同一个内存空间

参考博客地址:https://blog.csdn.net/u014253480/article/details/50420098

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值