深入了解==和equals

equals与==的区别简单说明

  1. == 运算符:

    • 用于比较基本数据类型时,比较的是它们的值是否相等。
    • 用于比较引用数据类型时,比较的是对象的内存地址是否相同,即是否指向同一个对象。
    示例:
    
    int a = 5; int b = 5; 
    System.out.println(a == b); // true
    String str1 = new String("Hello");
    String str2 = new String("Hello");                       
    System.out.println(str1 == str2); // false,因为它们是不同的对象

  2. equals 方法:

    • equals 是一个方法,用于比较对象的内容是否相等。在Object类中,equals 方法默认实现是使用 == 比较对象的引用地址。
    • 很多类(如StringInteger等)在它们的类定义中覆盖了 equals 方法,改变了默认的行为,以比较对象的内容。
    示例:
    
    String str1 = new String("Hello");                             
     String str2 = new String("Hello"); 
    System.out.println(str1.equals(str2)); //true,因为它们的内容相同

总结:

  • == 用于比较基本数据类型时,比较的是它们的值是否相等。用于比较引用数据类型时,比较的是对象的内存地址是否相同,即是否指向同一个对象。
  • equals.Object类中,equals 方法的默认实现确实使用 == 来比较对象的引用地址。因为Object类是所有类的根类,所以默认情况下,所有类都继承了这个equals方法。因此,如果一个类没有覆盖(override)equals 方法,它会继承Object类的实现,该实现就是使用 == 比较引用地址。但是(重点),许多类会覆盖 equals 方法以提供更有意义的对象比较。例如,String类、Integer类等都覆盖了equals方法,使其比较对象的内容而不仅仅是引用地址。覆盖equals方法的目的是为了根据对象的实际内容定义相等性,而不仅仅是根据引用地址。
class MyClass {
    // 如果不覆盖 equals 方法,它会使用 Object 类的默认实现
}

MyClass obj1 = new MyClass();
MyClass obj2 = obj1; // obj2 指向 obj1 的同一个对象

System.out.println(obj1.equals(obj2));  // 这里默认使用 Object 类的 equals,比较的是引用地址,返回 true

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值