freeCodeCamp/guide/chinese/java/equality/index.md

2.9 KiB
Raw Blame History

title localeTitle
Checking for Equality 检查平等

检查平等

在Java中有两种方法可以检查两个变量是否“相同” ==.equals() 。但是,这两种方法的工作方式不同。

==运算符

Java中的基本相等操作 ==var1 == var2 ,检查var1var2是否指向同一个_对象引用_ 。 也就是说,如果var1与内存中的类的_实例_与var2 ,则var1 == var2为true。

但是,如果将var1var2创建为类的两个单独实例(即使用new关键字),则var1 == var2将为false。即使两个对象碰巧包含完全相同的属性和值 ==比较也不会通过,因为它们不指向内存中的同一对象。

对于原始变量类型,例如intdouble ==运算符总是可以用于检查相等性,因为它们的值直接与变量一起存储(而不是作为对内存中另一个槽的引用)。

int var1 = 1; 
 int var2 = 1; 
 System.out.println(var1 == var2) // true 
 
 MyObject obj1 = new MyObject(); 
 MyObject obj2 = obj1; 
 MyObject obj3 = new MyObject(); 
 
 System.out.println(obj1 == obj2) // true 
 System.out.println(obj1 == obj3) // false 
 System.out.println(obj2 == obj3) // false 

.equals()方法

Java中的内置Object类(所有其他类自动扩展)包含许多有用的内置方法。一种这样的方法是equals() ,它将另一个对象作为其参数,并根据该类的相关逻辑返回两个对象是否应被视为“相等”。

'String'类是覆盖'equals'方法的类的最常见示例之一。当比较两个'String'是否相等时,你需要使用'equals'方法,因为'=='将无法正常工作。

String s1 = "Bob"; 
 String s2 = "ob"; 
 s2 = "B" + s2; //s2 now is also "Bob" 
 System.out.println(s1 == s2); //false 
 System.out.println(s1.equals(s2)); //true 

在Java中创建新类时通常需要覆盖equals()方法,以便提供更有意义的方法来比较同一个类的两个对象。如何实现此方法完全取决于开发人员的判断。

例如,如果两个PersonnamedateOfBirth相同,则可以认为这两个Person应被视为“相等”。这个逻辑将在你的Person类的equals()方法中实现:

public class Person { 
    public String name; 
    public Date dateOfBirth; 
 
    public boolean equals(Person person) { 
        return this.name.equals(person.name) && this.dateOfBirth.equals(person.dateOfBirth); 
    } 
 } 

Java中的大多数内置类以及流行库提供的类将以有意义的方式实现equals()方法。

例如, java.util.Set接口指定Setequals()方法将返回true如果“指定的对象也是一个集合两个集合具有相同的大小并且包含指定集合的每个成员在这套“。

但是,如果一个类没有覆盖默认的equals()实现,那么将应用默认实现,它只使用==运算符来比较这两个对象。