经典题:equals() 方法和 == 操作符的区别

目录

1. == 操作符

2. equals() 方法

3. 区别总结

4. 示例


1. == 操作符

== 操作符在Java中用于比较两个变量的值是否相等。但是,它比较的方式依赖于操作数的类型:

  • 对于基本数据类型(如int, char, boolean等)== 比较的是值是否相等。

  • 对于引用数据类型(如对象)== 比较的是两个变量是否指向内存中的同一个对象(即它们的内存地址是否相同)。如果两个对象引用指向同一个对象,则 == 返回 true;否则返回 false

2. equals() 方法

equals()Object 类的一个方法,用于比较两个对象的内容是否相等。默认情况下,Object 类的 equals() 方法实现与 == 操作符在比较引用类型时相同,即比较两个对象的引用是否指向同一个对象。但是,许多Java类(如 String, Integer, Double 等包装类)都重写了 equals() 方法,以提供基于对象内容的比较,而不是基于引用。

  • 重写后的 equals() 方法:通常,当我们创建自己的类时,如果希望基于对象的内容而不是引用来比较对象,我们需要重写 equals() 方法。此外,按照惯例,如果重写了 equals() 方法,也应该重写 hashCode() 方法,以保持 hashCode() 的一般约定,即相等的对象必须具有相等的哈希码。

3. 区别总结

  • ==

    • 对于基本数据类型,比较的是值。

    • 对于引用数据类型,比较的是引用(即内存地址)。

  • equals()

    • 默认情况下,比较的是引用(与 == 在引用类型上的行为相同)。

    • 但许多类(如字符串、包装类)都重写了此方法,以提供基于内容的比较。

    • 如果你的类需要基于内容的比较,你应该重写 equals() 方法。

4. 示例

 String s1 = new String("hello");
 String s2 = new String("hello");
 String s3 = s1;
 ​
 System.out.println(s1 == s2); // false,因为s1和s2指向不同的对象
 System.out.println(s1.equals(s2)); // true,因为s1和s2的内容相同
 System.out.println(s1 == s3); // true,因为s1和s3指向同一个对象

在这个例子中,== 在比较 s1s2 时返回 false,因为它们指向的是不同的对象,尽管它们的内容相同。而 equals() 方法在比较 s1s2 时返回 true,因为 String 类重写了 equals() 方法以提供基于内容的比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值