簡體   English   中英

覆蓋.equals()方法(比較字符串時==返回true)!

[英]Overriding .equals() method (== returned true while comparing Strings)!

public class Employee {

private String firstName;
private String lastName;
private int age;

public Employee(String firstName, String lastName, int age) {
    super();
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
}

public boolean equals(Employee s) {
    if (this.firstName==s.firstName  && this.lastName == s.lastName) { //Line 1
        return true;
    }
    return false;
}

public static void main(String agrs[]) {

    Employee e1 = new Employee("Jon", "Smith", 30);
    Employee e2 = new Employee("Jon", "Smith", 35);

    System.out.println(e1.equals(e2));
}

}

第1行在將兩個String與==運算符進行比較時返回true。我認為e1和e2的“ Jon”和“ Smith”將具有兩個不同的引用(內存位置)。

什么概念正在照顧e1和e2的“ Jon”和“ Smith”以具有相同的引用?(字符串緩存?!還是只是巧合?)

這是因為字符串實習 字符串文字“ Jon”和“ Smith”被編譯為相同的字符串,並由編譯器保存在字符串常量池中。 因此,在這種情況下,兩個構造函數都將引用相同的實例。

您可以使用以下內容查看差異:

Employee e1 = new Employee("Jon", "Smith", 30);
Employee e2 = new Employee("Jon", "Smith", 35);
Employee e3 = new Employee(new String("Jon"), new String("Smith"), 35);

System.out.println(e1.equals(e2));  // true
System.out.println(e1.equals(e3));  // false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM