1
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 行在使用 == 运算符比较两个字符串时返回 true。我认为 e1 和 e2 的“Jon”和“Smith”将有两个不同的引用(内存位置)。

什么概念在处理 e1 和 e2 的“Jon”和“Smith”以具有相同的引用?(字符串缓存??!还是只是巧合?)

4

1 回答 1

1

这是因为string interning。字符串文字“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
于 2015-01-18T14:22:26.203 回答