java中关于==与equals方法不同及equals覆写

本文详细解析了Java中equals方法与==运算符的区别,重点介绍了如何正确使用equals进行对象比较,尤其是在集合操作中的重要性,并提供了一个Book类的具体实现示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先,我们需要明确,==比较的是两个对象的地址,基本类型全部可用==比较(比较的是基本类型元素的值),可是除了基本类型之外的引用类型,如String,因不可比较地址,但其equals方法覆写了,所以可用作比较值。只有覆写了equals方法的才可以比较值,否则都是比较地址(由Object类中的equals得到)。

在关于集合的删除,查询中,一般需要覆写equals方法,因为如不覆写,则不知道通过什么来比较。

public class Book {
private int num;
private String name;
public Book(int num, String name) {
super();
this.num = num;
this.name = name;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Book [num=" + num + ", name=" + name + "]";
}

@Override
public boolean equals(Object obj) {                   //==比较的是地址,equals比较的是值
if(this==obj){       
return true;
}
if(obj==null){
return false;
}
if(!(obj instanceof Book)){
return false;
}
Book book=(Book)obj;
if(this.num==book.num&&this.name.equals(book.name)){
return true;
}
return false;
}
}


public class test {


public static void main(String[] args) {
Book b1=new Book(20, "java开发");
Book b2=new Book(20, "java开发");

System.out.println(b1.equals(b2));
}
}

equals方法的覆写可有编译器自动生成,理解原理即可。

### Java 中 `equals` 方法和 `==` 运算符的区别 在 Java 编程语言中,`equals()` 方法用于比较两个对象的内容是否相等,而 `==` 运算符则用来判断两个引用变量是否指向同一个内存地址。 对于基本数据类型的比较: - 使用 `==` 来直接对比数值大小。 对于对象类型的数据比较: - 如果使用 `==` ,那么是在检查这两个对象实例是否完全相同,即它们是否位于同一位置存储于堆空间内[^1]。 - 当调用 `equals()` 方法时,默认情况下它会执行 `==` 类似的操作;但是通常建议重方法以便能够基于实际属性来评估逻辑上的平等关系。例如,在 String 和 Wrapper 类(Integer, Double 等)中已经实现了合理的 `equals()` 行为[^2]。 下面是一个简单的例子展示两者的不同之处: ```java String s1 = new String("hello"); String s2 = new String("hello"); System.out.println(s1 == s2); // false, because they are different objects in memory. System.out.println(s1.equals(s2)); // true, since content of both strings is same. // For primitive types like int or char '==' compares their values directly int num1 = 5; int num2 = 5; System.out.println(num1 == num2); // true as integers have equal value here. ``` 当准备面向对象编程的面试题目时,关于 `equals` 对比 `==` 的常见问题可能包括但限于以下几点: - 解释为什么即使字符串具有相同的字符序列,`==` 返回的结果可能是 `false`. - 描述如何正确地盖 `Object` 类中的 `equals(Object obj)` 方法以确保其遵循通用约定。 - 讨论如果自定义类未适当 `equals()` 可能引发的问题以及解决方案。 - 探讨哈希表结构如 `HashMap`, `HashSet` 如何依赖 `equals()` 和 `hashCode()` 方法来进行键查找并保持唯一性约束[^3].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值