Java有两种方式来测试两个变量是否相等:一种是利用==运算符,另一种是利用equals()方法
一.==运算符
当使用==来判断两个变量是否相等时
1.如果两个是基本类型变量,且都是数值型(不一定要求数据类型要严格相同),只要两个变量的值相等,就将返回true。
例如:
int it=65;
float fl=65.0f;
//将返回true
System.out.println("65和65.0是否相等?"+(it==fl));
char ch='A';
//将返回true
System.out.println("65和A是否相等?"+(it==ch));</span>
2.对于两个引用型变量,只有它们指向同一个对象时,==才会返回true。==不可用于比较类型上没有父子关系的两个对象。
例如:
String str1=new String("hello");例如:
String str2=new String("hello");
//将返回false,<span style="font-family: 宋体;font-size:24px;">str1与str2指向的不是同一个对象</span>
System.out.println("str1和str2是否相等?"+(str1==str2));</span>
<span style="font-size:24px;">
//编译错误,Java.lang.String与EqualTest类没有继承关系 //System.out.println("hello"==new EqualTest());</span>
二.equals()方法
在判断引用变量是否相等时,我们也希望有一种类似于“值相等”的判断规则,并不严格要求两个引用变量指向同一个对象,就可以考虑使用equals()方法。
1.equals()方法是Object类提供的一个实例方法,因此所有引用变量都可以调用该方法来判断是否与其他变量相等。
2.但这个方法判断两个对象相等的标准与使用==运算符没有区别,同样要求引用变量指向同一个对象时才会返回true。因此,若想自定义相等的标准,需要我们重写equals()方法。
3.String已经重写了Object的equals()方法,只要两个字符串所包含的字符序列相同,通过equals()比较将返回true,否则将返回false。
例如:
String str1=new String("hello");
String str2=new String("hello");
//将返回true
System.out.println("str1和str2是否相等?"+(str1.equals(str2)));
重写equals方法示例:
package EqualsTeest;
class Person {
private String name;
private String idStr;
public Person() {
}
public Person(String name, String idStr) {
this.name = name;
this.idStr = idStr;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public void setIdStr() {
this.idStr = idStr;
}
public String getIdStr() {
return idStr;
}
//重写equals()方法,自定义相等的标准
public boolean equals(Object obj){
//如果两个对象是同一个对象
if(this==obj){
return true;
}
//只有当obj是Person对象
if(obj!=null&&obj.getClass()==Person.class){
Person personObj=(Person)obj;
//并且当前对象的idStr与obj的idStr相等时才可判断两个对象相等
if(this.getIdStr().equals(personObj.getIdStr())){
return true;
}
}
return false;
}
}
public class OverridEqualsRight {
public static void main(String[] args){
Person pl=new Person("孙悟空","123456789");
Person p2=new Person("孙行者","123456789");
Person p3=new Person("孙悟饭","987654321");
//返回true
System.out.println("p1与p2是否相等?"+pl.equals(p2));
//返回false System.out.println("p2与p3是否相等?"+p2.equals(p3)); }}