在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

