Java中==和equals方法

时间:2022-04-06 13:53:28

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已经重写Objectequals()方法,只要两个字符串所包含的字符序列相同,通过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));	}}