关于equals和==的区别

工作8年,一直很浮躁,没深入了解Java的基础,今天才发现自己一直以来的错误认知。

1.==一般用于基本数据类型,比较它们存储的值是否相等,也可用于比较引用类型,比较的是它们所指向对象的地址值(是否是同一个对象)


2.equals只能用于比较引用类型(对象),不能用于比较基本数据类型


3.最大的误区:对于引用类型,==和最初的Object中的equals实际上都是比较两个引用类型变量所指向对象的地址值,然而开发当中常用的equals是String类中重写过的方法,比较的是String的值,如果是自定义对象,则一般是对比这两对象是否相同,有其他需求才会在对象内重写equals

Object中的equals:

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

然后是复制别人的栗子:

public static void main(String[] args) {
        //基本数据类型的比较
        int num1 = 10;
        int num2 = 10;
        System.out.println(num1 == num2);   //true

        //引用数据类型的比较
        //String类(重写了equals方法)中==与equals的比较
        
        String s1 = "hello";
        String s2 = "hello";
        System.out.println(s1 == s2);    //true,比较地址值:内容相同,因为常量池中只有一个“hello”,所以它们的地址值相同
        System.out.println(s1.equals(s2));//true,比较内容:内容相同,因为常量池中只有一个“hello”,所以它们的地址值相同
        System.out.println(s1.equals("hello")); //true

       
        String s3 = new String("hello");
        String s4 = new String("hello");
        System.out.println(s3 == s4);        //false,比较地址值:s3和s4在堆内存中的地址值不同
        System.out.println(s3.equals(s4));    //true,比较内容:内容相同

        //没有重写equals方法的类中==与equals的比较 
        People p1 = new People();
        People p2 = new People();
        People p = p2;
        System.out.println(p1);//People@135fbaa4
        System.out.println(p2);//People@45ee12a7
        System.out.println(p); //People@45ee12a7
        System.out.println(p1.equals(p2));       //false,p1和p2的地址值不同
        System.out.println(p.equals(p2));        //true,p和p2的地址值相同
}

参考:详解“==”和equals的区别_equals和==的区别-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值