java中==和equals区别

20 篇文章 0 订阅

        java中的 “==” 、“equals” 以及 hashCode都能起到比较的作用,那么它们的区别又是什么呢?

一、操作符 ==

        如果是比较基本类型,如int,long等,它们的比较就是“值”的比较;如果是比较对象实例,那么比较的是它们两个所指向的对象在内存中的存储地址是否是一致的。而不是比较它们的内容。、

1.对基本类型使用操作符 ==

int类型的比较例子如下:

        int x = 1;
        int y = 1;
        System.out.println(x == y);

输出结果:

true

 2.对对象实例使用操作符 ==

对象比较例子如下:

(1)


        Object obj1 = new Object();
        Object obj2 = new Object();
        System.out.println(obj1 == obj2);

输出结果:

false

解释:

        在(1)new了两个内存对象,即分配了两个内存地址,当对比obj1和obj2的时候使用==判断,它们并不是指向相同的内存地址,所以得到的结果为false。

(2)

        Object obj3 = new Object();
        Object obj4 = obj3;
        System.out.println(obj3 == obj4);

输出结果:

true

解释:

        在(2)new了一个对象obj3,即分配了一个内存地址,然后又初始化了一个对象obj4指向这个内存地址,所以当使用==比较obj3和obj4的时候,它们是指向相同的内存地址的,所以得到的结果为true。

二、equals()方法

       所有类中的equals()方法都是继承或者复写Object类的equals()方法的, 所以我们可以先看一下Object 类中的equals()方法:

可以看到,Object中的equals()里是使用==比较的,即比较俩个实例对象的引用地址是否一致。

注意:String类型的比较

        根据上面的说法,大家可能会存在这么一个疑惑,那就是为什么使用String类型的对象时却能够比较里面的内容,如下:


        String str1 = "str";
        String str2 = "str";
        System.out.println(str1.equals(str2));

输出结果:        

true

        如上结果,两个string对象str1和str2明显是指向不同的内存空间的,但是实际上结果是返回了true的。

        别急,我们可以看看String类中的equals()方法的:

        可以看到,String中的equals()方法是被复写的,先看是否指向同一个内存空间,如果不是的话就比较它们的内容是否一致。故如果内容一致而指向的内存空间不一致的话,依然是会返回true的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值