== 和 equals 操作比较:
测试代码:
package test;
public class Test implements Cloneable {
public static void main(String[] args) throws Exception {
Test a1 = new Test();
Test a2 = new Test();
Test a3 = a1;
Test a4 = (Test) a1.clone();
Class<?> clazz = Class.forName("test.Test");
Test a5 = (Test) clazz.newInstance();
String b1 = "abc";
String b2 = "abc";
String b11 = new String("a");
String b12 = new String("a");
Integer c1 = 123;
Integer c2 = 123;
Integer c11 = new Integer(11);
Integer c12 = new Integer(11);
System.out.println("===========Object:==============");
System.out.println(a1 == a2);
System.out.println(a1.equals(a2));
System.out.println(a1 == a3);
System.out.println(a1 == a4);
System.out.println(a1.equals(a4));
System.out.println(a1 == a5);
System.out.println(a1.equals(a5));
System.out.println("==============String:==============");
System.out.println(b1 == b2);
System.out.println(b1.equals(b2));
System.out.println("==============new String:==============");
System.out.println(b11 == b12);
System.out.println(b11.equals(b12));
System.out.println("==============Integer:==============");
System.out.println(c1 == c2);
System.out.println(c1.equals(c2));
System.out.println("==============new Integer:==============");
System.out.println(c11 == c12);
System.out.println(c11.equals(c12));
}
}
测试结果:
===========Object:==============
false
false
true
false
false
false
false
==============String:==============
true
true
==============new String:==============
false
true
==============Integer:==============
true
true
==============new Integer:==============
false
true
JDK7中相关源码:
Object中equals方法:
public boolean equals(Object obj) {
return (this == obj);
}
从源码中可以看出,equals在比较Ojbect时与==操作结果相同。
Integer中equals方法:
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
String类中equals方法:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
结论:
==操作:
1.基本类型和String:比较的是值
2.Object: 比较是否指向同一对象
equals操作:
1.String & Object:比较的是值是否相同
使用new 关键字后,jvm会分配资源创建新的对象。