在Java中,`==`和`equals()`是用于比較對象的兩種不同方法,它們有著不同的用途和行為。以下是它們的區(qū)別:
`==` 運(yùn)算符
- **用途**:用于比較兩個(gè)變量是否引用同一個(gè)對象。
- **比較內(nèi)容**:比較的是兩個(gè)引用是否指向同一個(gè)內(nèi)存地址。
- **適用范圍**:可以用于比較基本數(shù)據(jù)類型和引用類型。
- **示例**:
```java
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2); // 輸出 false,因?yàn)樗鼈兪遣煌膶ο?/p>
```
`equals()` 方法
- **用途**:用于比較兩個(gè)對象的內(nèi)容是否相同。
- **比較內(nèi)容**:比較的是對象的實(shí)際內(nèi)容,而不是內(nèi)存地址。
- **適用范圍**:主要用于比較引用類型,尤其是字符串和自定義對象。
- **示例**:
```java
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1.equals(str2)); // 輸出 true,因?yàn)樗鼈兊膬?nèi)容相同
```
具體區(qū)別
1. **基本數(shù)據(jù)類型**:
- `==`:比較的是值是否相等。
- `equals()`:不能用于基本數(shù)據(jù)類型。
2. **引用類型**:
- `==`:比較的是引用是否相同,即是否指向同一個(gè)對象。
- `equals()`:比較的是對象的內(nèi)容是否相同。
3. **字符串比較**:
- `==`:比較的是字符串對象的引用是否相同。
- `equals()`:比較的是字符串的內(nèi)容是否相同。
自定義對象的比較
對于自定義對象,如果需要使用`equals()`方法進(jìn)行內(nèi)容比較,需要重寫`equals()`方法。例如:
```java
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```