[英]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.