在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