目录
一、"== "的使用
==:运算符
表示比较“==”两边的对象的值是否相同,但是“值”也是有所区分的,分为基本数据类型和引用数据类型。
- 如果比较基本数据类型,则比较他们的值是否相同。
- 如果比较的是引用数据类型,则比较的是对象的地址值是否相同。
在比较基本数据类型时,表示对数值的操作,比较数值是否相等,但不一定非要他们的数据类型是一样的,比如,不一定非要double和double,或者int和int相比,可以是其他的基本数据类型相比。
public class EqualsTest {
public static void main(String[] args) {
System.out.println("************基本数据类型****************");
int i=10;
int j=10;
double d=10.0;
System.out.println(i==j);//true;
System.out.println(i==d);//true;
char c=10;
System.out.println(i==c);
char c1='A';
char c2=65;
System.out.println(c1==c2);
}
}
运行结果:
二、equals()方法
首先:equals()是一个方法
equals()方法比较的是对象的内容是否相同,它应用于引用数据类型。
其实在看java中源码时候可以看出来,equals()方法调用的也是“==”的判断,不过这是在没有重写equals()方法之前,也就是说equals()默认的是“==”,在这里有很多笔者没有说的很明确,有时候会有误导新手,比如说像我这样的,所以关于重写的原理可以自己研究研究。所以说如果要比较引用数据类型对象的内容是否相同,就必须先对equals()方法重写。
注意事项
1.是一个方法,而非运算符(即不能使用在基本数据类型中)
2.只适用于引用数据类型中。
3.Object类中equals()的定义
public boolean equals(Object obj){
return(this==obj);
}
说明:Object中定义的equals()和==的作用是一样的,比较两个对象的地址值是否相同,即两个引用是否指向同一个对象。
4.像String,Date,File。包装类等都重写了Object类中的equals()方法,
重写以后,比较的不是两个引用的地址是否相同,而是比较两个对象的"实体内容"是否相同。
5.通常情况下,我们自定义的类如果使用equals()方法重写,
重写的原则:比较两个对象的实体内容是否相同。
public class EqualsTest {
public static void main(String[] args) {
System.out.println("*************引用类型***************");
Customer cust=new Customer("Tom",21);
Customer cust1=new Customer("Tom",21);
System.out.println(cust==cust1);
String str1=new String("hello world");
String str2=new String("hello world");
System.out.println(str1==str2);
}
}
运行结果:
三、equals()方法原则:
1、自反性:x.equals(x)返回true;
2、对称性:若x.equals(y)为true,则y.equals(x)亦为true;
3、传递性:若x.equals(y)为true且y.equals(z)也为true,则x.equals(z)亦为true;
4、一致性:x.equals(y)的第一次调用为true,那么x.equals(y)的第二次、第三次、第n次调用也均为true,前提条件是没有修改x也没有修改y;
5、对于非空引用x,x.equals(null)永远返回为false
大佬勿喷,欢迎大家的指正。