总结:
1.对于字符串类型的变量来说,“= =”比较的是两个对象的首地址,而equals()方法比较的是两个对象的内容。
2.对于非字符串类型变量来说,都是比较首地址。
3.对于字符串操作,JAVA程序在执行时会维护一个字符串池(String Pool),如果池中有相同的String内容就返回该内容而不是创建新的String对象。
4.除了字符串类型变量,equals()方法是比较两个对象的内容,其他情况下“==”和equals()方法都是比较首地址。
用一个例子简单演示上述结论:
class A
{
int a = 1;
}
public class flo
{
public static void main(String[] args) {
A obj1 = new A();
A obj2 = new A();
String s1,s2,s3 = "abc",s4 = "abc";
s1 = new String("abc");
s2 = new String("abc");
System.out.println(s1.equals(s2)); //equals()比较字符串内容,true
System.out.println(s1 == s2); //"=="比较字符串地址,false
System.out.println(s1.equals(s3)); //内容比较,true
System.out.println(s1 == s3); //地址比较,false
System.out.println(s2.equals(s3)); //内容比较,true
System.out.println(s2 == s3); //地址比较,false
System.out.println(obj1 == obj2); //"=="非字符串地址比较,false
System.out.println(obj1.equals(obj2));//equals()方法非字符串地址比较,false
obj1 = obj2;
System.out.println(obj1.equals(obj2));//地址比较,true(非基础类型变量引用传递,传的是地址,所以true)
System.out.println(obj1 == obj2); //地址比较,true
}
}