最直接的区别:
‘==’:比较的是两个对象之间的地址是否相同,即是否为同一个对象。
‘equals’:通常比较的是两个对象的值是否,关注的是值而不是地址。
public static void main(String[] args) {
/**
* 基本类型看equals和==的区别
*
*/
int a = 12;
int b = 14;
int c = 26;
int d = 26;
System.out.println("a == b :"+(a==b)); //a == b :false
System.out.println("a + b == c :"+((a+b)==c)); //a + b == c :true
System.out.println("c == d :"+(c == d));//c == d :true
System.out.println("*****************************");
//***********************************************
/**
* 引用类型看equals和==de区别
*/
Integer i1 = new Integer(a);
Integer i2 = new Integer(b);
Integer i3 = new Integer(c);
Integer i4 = new Integer(d);
System.out.println("i1 == i2 :"+ (i1 == i2)); //i1 == i2 :false
System.out.println("i1.equals(i2) :"+ i1.equals(i2));//i1.equals(i2) :false
System.out.println("i3 == i4 :"+ (i3 == i4)); //i3 == i4 :false
System.out.println("i3.equals(i4) :"+ i3.equals(i4));//i3.equals(i4) :true
System.out.println("*****************************");
//***********************************************
String s1 = "Hello";
String s2 = " World Java";
String s3 = "Hello World Java";
String s4 = "Hello World Java";
System.out.println("s3 == s4 :"+(s3 == s4)); //s3 == s4 :true
System.out.println("s3.equals(s4) :" + (s3.equals(s4))); //s3.equals(s4) :true
System.out.println("(s1+s2).equals(s3) : "+(s1+s2).equals(s3));//(s1+s2).equals(s3) : true
System.out.println("(s1+s2) == s3 :" +((s1+s2) == s3)); //(s1+s2) == s3 :false
}
特别值得注意的是:
在Object类中,equals方法和“==”是一样的,没有区别,由于Object 类是所有类的最高基类,所有其他类都继承类Object类的equals()方法,定义原型如下:
public boolean equals (Object x){
return this == x;
}
因为像String、Integer这些类是重写了Object类中的equals方法,所以才这两者不同。