在学习关于运算符的时候,我对于==和equals这俩个都是比较的运算符不是很清楚,通过查询其他的资料,我对他有了一个较为直观的理解。
首先,这两个都是测量两个对象是否相等的方式。其次,equals起源于==,随着不断的变化,我们给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));
2.如果两个变量是引用型变量,比较的是两个对象的地址是否相等,即都指向同一个对象,返回true
String str1=new String("hello");
String str2=new String("hello");
//将返回false str1与str2使用了new,指向的不是同一个对象
System.out.println("str1和str2是否相等?"+(str1==str2));
当使用equals比较时:
1.equals()方法是Object类提供的一个实例方法,因此所有引用变量都可以调用该方法来判断是否与其他变量相等。
2.这个方法判断两个对象相等的标准与使用==运算符没有区别,同样要求引用变量指向同一个对象时才会返回true。因此,若想自定义相等的标准,需要我们重写equals()方法。
3.String已经重写了Object的equals()方法,只要两个字符串所包含的字符序列相同,通过equals()比较将返回true,否则将返回false。equals是判断字符串内容是否相等,字符串的值不可变。
//重写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;
}
4.equals()是方法,如果equals 默认就是没被覆盖equals方法比较两个引用数据的地址是否相等。 如果不重写Object类中的equals()方法,那么它等同于==,即this == obj,如果重写,则equals()方法通常比较的是对象的属性。