Java 重写.equals()方法(=在比较字符串时返回true)!

Java 重写.equals()方法(=在比较字符串时返回true)!,java,caching,equals,referenceequals,Java,Caching,Equals,Referenceequals,第1行使用==运算符比较两个字符串时返回true。我认为e1和e2的“Jon”和“Smith”将有两个不同的引用(内存位置) 考虑e1和e2的“Jon”和“Smith”以获得相同的引用是什么概念?(字符串缓存???!还是只是巧合?这是因为。字符串文字“Jon”和“Smith”被编译成同一个字符串,并由编译器保存在字符串常量池中。因此,在这种情况下,两个构造函数将引用同一个实例 您可以使用以下选项查看差异: public class Employee { private String first

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

考虑e1和e2的“Jon”和“Smith”以获得相同的引用是什么概念?(字符串缓存???!还是只是巧合?

这是因为。字符串文字“Jon”和“Smith”被编译成同一个字符串,并由编译器保存在字符串常量池中。因此,在这种情况下,两个构造函数将引用同一个实例

您可以使用以下选项查看差异:

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));
}

}

有关实习生方法的更多详细信息。。在比较某些自定义类(此处为Employee)的字符串时,是否最好使用==而不是.equals(),因为我认为==会更快?@user104309否总是最好使用
.equals
来比较字符串。通常情况下,不要依赖字符串实习来进行比较。
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