==和equals比较运算符

时间:2021-12-08 13:54:21

       Java程序中测试两个变量是否相等有两种方式,一种是利用==运算符,另一种是利用equals方法。

       当使用==运算符(注意:==永远是判断内存地址是否相等,对于基本数据类型,没有对象的地址传递,但对于对象,就要对象地址的传递)判断两个变量是否想等时,如果2个变量时基本类型的变量,且都是数值型(不一定要求数据类型严格形同),则只要两个变量的值相等,使用==判断则返回true。

        但对于两个引用类型的变量,必须它们指向同一个对象时,==判断才会返回true。下面程序示范了使用==来判断两种类型变量是否相等的结果。

 

public class TestEqual

{

public static void main(String[] args)

{

int it=65;

float f1=65.0f;

//将输出true

System.out.println("65和65.0f是否相等?"+(it==f1));

char ch='A';

//将输出true

System.out.println("65和'A'是否相等?"+(it==ch));

 

String str1=new String("hello");

String str2=new String("hello");

//将输出false

System.out.println("str1和str2是否相等?"+(str1==str2));

//将输出true

System.out.println("str1是否equals str2?"+str1.equals(str2));

}

}

    运行上面程序,可以看到65、65.0f和'A'相等。但对于str1和str2,因为它们都是引用类型变量,它们分别指向2个通过new关键字创建的String对象,因此str1和str2两个变量不相等。
    但在很多时候,程序判断两个引用对象量是否相等时,也希望有一种类似于“值相等”的判断规则,并不严格要求两个引用变量指向同一个对象。例如对于两个字符串变量,可能只是要求它们引用字符串对象里包含的字符序列相同即可认为相等。此时就可以利用String对象的equals方法来进行判断,例如上面代码的最后一行代码表明str1.equals(str2)将返回true。
    String已经重写了Object的equals()方法,String的equals()方法判断两个字符串相等的标准是:只是两个字符串所包含的字符序列相同,通过equals()比较返回true;否则将返回false。
    equals方法是Object类提供的一个实例方法,因此所有引用变量都可调用该方法来判断是否与其他引用变量相等。但这个方法判断两个对象相等的标准与==符号没有区别,同样要求两个引用变量指向同一个对象才会返回true。因此这个Object类提供的equals方法没有太大的实际意义,如果希望采用自定义的相等标准,可采用重写equals方法来实现。