java中equals和==相同点和不同点
时间: 2024-10-17 14:10:07 浏览: 18
在Java中,`equals()` 和 `==` 都用于比较两个对象,但它们的作用和用法有明显的区别:
**相同点:**
1. 当比较的对象都是基本数据类型(如 int、char 等),两者的效果是一样的,都会检查值是否相等。
2. 对于 `null` 的判断,两者都表示空引用,即如果一个对象等于 `null`,另一个也等于 `null`,结果为 `true`。
**不同点:**
1. **对于非基本类型的对象(如字符串、自定义类的对象):**
- `==` 检查的是对象的内存地址,也就是对象是否是同一个实例。如果两个引用指向不同的内存空间,即使对象内容相同,`==` 返回的结果也是 `false`。
- `equals()` 则是在对象内部实现了具体的逻辑,通常会比较对象的内容或状态,而非地址。如果内容相同,则返回 `true`。这个方法可以根据需要覆盖以提供特定的比较规则。
2. **不可变对象(如String):**
Java String 类型的 `equals()` 方法默认就是重写了 `==`,所以在字符串常量池中,如果两个字符串引用指向相同的字符序列,`equals()` 和 `==` 都会返回 `true`。
**示例代码:**
```java
String str1 = new String("hello");
String str2 = new String("hello"); // 不同的对象,地址不同
System.out.println(str1 == str2); // 输出 false
System.out.println(str1.equals(str2)); // 输出 true
int a = 5;
int b = 5;
System.out.println(a == b); // 输出 true
```
**相关问题--:**
1. Java中的equals()方法可以重写吗?
2. 何时使用`==`,何时使用`equals()`比较对象?
3. 如果一个类没有重写equals()方法,它将使用哪个类的equals()方法进行比较?
阅读全文