很多时候都会遇到==和equals()的对比
整理:
==操作符既可以用于比较基本数据类型(boolean,char, int,float, double等),又可以在对象之间进行比较。
equals方法则只能用于对象之间的比较。不能对操作符进行重载但是可以对方法进行重载。
所以在对对象进行比较时,==操作符只能用于判断两个比较对象是否属于同一个引用,如果属于同一个引用则返回true,如果不是则返回false,而在equals方法中除了可以判断两个比较对象是否属于同一个引用之外还可以对equals方法进行重载,所以当我们比较两个Student类的对象是否相等时,我们可以重写equals方法从而可以定制出我们自己的equals方法(比如,如果如果两个Student类对象的id相等时,我们判定这两个对象相等,或者是姓名和ID同时相等时才判定两个对象相等)
在对String类型的对象进行比较时,如果采取==操作符,则只有两个变量属于同一对象的引用时才会返回true,而equals方法的比较原理则是只要两个变量的内容相同则返回true。看下面例子:
public class Test{
public static void main(String[] args){
String s1 = new String(“hello,world”);
String s2 = new String(“hello,world”);
String s3 = s1;
/*
这里的s1和s2分别来自于不同对象的引用,所以第一个打印出来的为false,而由于equals的原理是只要
比较对象的内容相同就会返回true,所以第二个打印出来的为true
*/
System.out.println("== operator: " + (s1 == s2));
System.out.println("equals method: " + s1.equals(s2));
/*
s1和s3属于同一对象的引用,所以用==操作符进行比较时会返回true,同时equels方法返回的也是true
*/
System.out.println("== operator: " + (s1 == s3));
System.out.println("equals method: " + s1.equals(s3));
}
}
返回的结果建议自己操作一下:
从上面的例子可以看出,当我们对String类型的对象进行比较时,为了避免出错最好用equals方法。
最后,我们来看看其他类型的对象之间的比较。对其他类型的对象进行比较时,==操作和quals方法通常返回相同的结果。因为equals方法的默认原理比较两个对象的内存地址是否相同。但是在一般的对象中通常都会对equals方法进行重写啦!
public class Test1{
public static void main(String[] args){
Student s1 = new Student();
Student s2 = new Student();
Student s3 = s1;
/*
在一般的对象中equals中默认的工作原理是比较两个对象之间的内存地址是否相同,所以这里跟
==操作符判断两者是否属于同一个对象的引用的原理相同。
由于s1和s2属于不同的对象,所以两种判断方法都回返回false
*/
System.out.println("== operator:" + (s1 == s2));
System.out.println(“equals method:” + s1.equals(s2));
/*
这里s1和s3属于同一对象的引用,所以两个比较方法返回的结果都为true
*/
System.out.println("== operator:" + (s1 == s3));
System.out.println(“equals method:” + s1.equals(s3));
}
}
/*
随便写的一个Student类
*/
class Student{
private int id;
private String name;
private String major;
public Student(){
}
public Student(int id, String name, String major){
this.id = id;
this.name = name;
this.major = major;
}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
public String getMajor(){
return major;
}
public void setMajor(String major){
this.major = major;
}
}
返回的结果建议自己操作一下:
小小的总结一下:
1、==操作符既可以用于比较基本的数据类型,也可以用于比较对象,而equals只可以用于对象之间的比较
2、在比较String类型的对象时,==操作符的原理只有两个变量是同一对象的引用时才会返回true,而equals方法只要两个变量的内容相同则返回true
3、其他类型的对象进行比较时,equals方法默认的原理是判断两者的内存地址是否相同,所以默认情况下与操作符返回的结果相同,但是这里应该发现差别,也就是equals方法可以被重写—用户可以定制自己的equals方法,而操作符不能被重写。