在Java中equals()和==之间的区别
时间:2020-02-23 14:34:05 来源:igfitidea点击:
在本教程中,我们将看到Java中等于和==之间的区别。
等于运算符"=="
相等运算符可用于比较原语,但是当我们使用==比较对象时,它只比较了引用而不是对象的实际内容。
等于方法
如果要比较对象的实际内容,那么我们需要覆盖类中的等于方法。
如果不覆盖对象的类等于方法,那么它的行为与"=="的行为相同,只比较引用。
让我们了解equals()和==在Java之间的区别。
equals()和==在Java之间的区别
- ==是运算符,而等于Java中的方法。
- ==建议比较原语,而等于方法建议比较对象的实际内容。
- 等于方法可以覆盖,但我们无法覆盖"=="运算符的行为
- ==可以与原语和对象一起使用,但我们不能使用具有基元的常用方法。
让我们在字符串和自定义对象的情况下快速示例。
例子
在字符串的情况下equals和==比较
字符串是最常见的场景,其中使用equals()和==方法。
package org.arpit.theitroad; public class StringEqualsAndOpetatorMain { public static void main(String[] args) { String name1=new String("John"); String name2=new String("John"); /*Even though content of objects is same, it will * return false, as name1 and name2 points to different objects */ System.out.println(name1==name2); /*Equals method compares content, so this will return true */ System.out.println(name1.equals(name2)); System.out.println("==================="); name2=name1; /*Now name1 and name2 both point to same reference * so this will return true */ System.out.println(name1==name2); /*Equals method compares content, so this will return true */ System.out.println(name1.equals(name2)); } }
运行上面的程序时,我们将得到以下输出
false true =================== true true
自定义对象时equals()和==比较
它非常类似于字符串。
让我们创建员工类并覆盖等于方法。
如果两名员工有同性名称和年龄,那么它们将被视为相同的。
package org.arpit.theitroad; public class Employee { String name; int age; public Employee(String name, int age) { this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Employee other = (Employee) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
为员工比较创建另一个程序
package org.arpit.theitroad; public class EmployeeEqualsAndOpetatorMain { public static void main(String[] args) { Employee emp1=new Employee("John",18); Employee emp2=new Employee("John",18); /*Even though content of objects is same, it will * return false, as name1 and name2 points to different objects */ System.out.println(emp1==emp2); /*Equals method compares content, so this will return true */ System.out.println(emp1.equals(emp2)); System.out.println("==================="); emp2=emp1; /*Now name1 and name2 both point to same reference * so this will return true */ System.out.println(emp1==emp2); /*Equals method compares content, so this will return true */ System.out.println(emp1.equals(emp2)); } }
运行上面的程序时,我们将得到以下输出
false true =================== true true