Java面试题:==运算符与equals方法的区别

一: ==运算符

  1. 如果比较的是基本数据类型,则直接比较数值是否相等,返回值为“true or false”
  2. 如果比较的是引用数据类型,则直接比较地址值是否相等,返回值为“true or false”

二: Object类中的equals()方法:

  1. Object类中的equals方法比较的是引用数据类型,比较的的是地址值是否相等,“返回true or false”
  2. 如果子类有重写了equals方法,例如String类型,则直接比较类中的属性,返回"true or false"

三:==运算符运用举例:

public class Comparea {
	public static void main(String[] args) {
		int i1=10;
		int j1=10;
		System.out.println(i1==j1);//==运算符的比较使用
		int i=10;
		char a=10;
		System.out.println(i==a);//char类型已经转换成了相应的ASCII码值,所以输出true
		A1 a1=new A1(2,"男");
		A1 a12=new A1(2,"男");
	   System.out.println(a1==a12);//==比较的是地址值,与根父类Object一样
	
	}
}
class A1{
	 private int age;
	 private String  name;
	A1(int age,String name){
		this.age=age;
		this.name=name;
	}
	
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

true
true
false

四:子类重写Object类中的equals()方法运用举例

public class Comparea {
	public static void main(String[] args) {
		A1 a1=new A1(2,"男");
		A1 a12=new A1(2,"男");
		System.out.println(a1==a12);//==比较的是地址值,与根父类Object一样
		System.out.println(a1.equals(a12));//此时的equals方法子类已经重写了,只比较类中的属性
		
	}
}
class A1{
	 private int age;
	 private String  name;
	A1(int age,String name){
		this.age=age;
		this.name=name;
	}
	
	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	@Override
	public boolean equals(Object obj) {//向上转型,把子类的对象赋给父类的引用,通过父类的引用调用,子类重写了的父类中的方法
		if(this==obj) {//this关键字就是表示当前类的对象
			return true;
		}
		if(obj instanceof A1) {//obj instanceof A:关键字的作用就是判断 
			//obj 是否是A1这个类的对象,或者其子类的对象
			
			A1 a1=(A1)obj;//再通过向下转型,去调用A1类中的方法
			return this.age==a1.age&&this.name.equals(a1.name);
		}return false;
	}
false
true
原文地址:https://www.cnblogs.com/ryyy/p/14227802.html