equals()与==的区别
1、equals( )用于比较两个对象的内容是否相等。
对象1.equals(对象2) //对对象1与对象2的首地址进行比较,判断两个对象是否指向同一个地址,如果是指向同一个地址则返回true,反之则反。
package com;
public class EqualsTest {
public static void main(String[] args) {
//对象name1与name2都指向存放“张三”的内存首地址
String name1="张三";
String name2="张三";
//对象name3指向存放“李四”的内存首地址
String name3="李四";
System.out.println(name1.equals(name2));
System.out.println(name1.equals(name3));
}
}
2、默认情况下(即没有被重写时)equals()只能比较引用类型,“==”既能比较引用类型又能比较基本类型。
package com;
public class EqualsTest {
public static void main(String[] args) {
int a=10;
int b=10;
int c=20;
//对象name1与name2都指向存放“张三”的内存首地址
String name1="张三";
String name2="张三";
//对象name3指向存放“李四”的内存首地址
String name3="李四";
//equals只能比较引用类型
System.out.println(name1.equals(name2));
System.out.println(name1.equals(name3));
//System.out.println(a.equals(b));
//System.out.println(a.equals(c));
//“==”既能比较引用类型又能比较基本类型
System.out.println(name1==name2);
System.out.println(name1==name3);
System.out.println(a==b);
System.out.println(a==c);
}
}
3、equals()方法从Object类继承,即比较对象引用的值(this和obj的首地址)
public boolean equals(Object obj) {
return (this == obj);
}
4、一般都被子类方法覆盖,不再比较引用的值,而是执行子类方法体的代码。
public boolean equals(Object obj)
{
return false;
}
/*
* 利用equal()比较两个对象的内容是否相等
*/
package com;
/*
* 定义Person类
* 属性:姓名,年龄
* 方法:比较两个对象的内容是否相等
*/
public class Person {
String name;
int age;
//定义equals方法用于比较两个对象的内容是否相等
public boolean equals(Object obj)
{
/* //this代表当前的Person类,即Person==obj
if(this==obj)
{
return true;//Person==obj,直接返回,停止执行下面的语句
}
//判断obj是否是Person的实例
if(obj instanceof Person)
{
//obj的原来类型是属于Object,而Person是Person类,是Object的子类。
//所以必须把obj强制转换为Person类,使得obj与Person处于相同的类型才能进行比较。
Person p =(Person)obj;
//属性进行一一比较
if(this.name.equals(p.name)&&this.age==p.age)
{
return true;
}
}*/
return false;
}
}
class Test{
public static void main(String[] args) {
//创建P1,P2两个对象
Person p1=new Person();
Person p2=new Person();
p1.name="Tom";
p1.age=20;
p2.name="Tom";
p2.age=21;
//打印P1,P2两个对象比较的结果
System.out.println(p1.equals(p2));
}
}
5、“==”运算符在比较基本数据类型时相当于算术等号;在比较引用数据类型时比较引用的值,不能被覆盖。