1、“”==“”比较的是值是否相等或者引用类型是否相等;
package other;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// 输出false,比较对象,new对象重新开辟了内存空间,两者内存不再相等
Integer a = 100;
Integer b = new Integer(100);
System.out.println(a == b);
// 输出ture,此时两个对象内存地址一致
Integer c = 100;
Integer d = 100;
System.out.println(c == d);
// 输出false,自动拆箱过程中Integer.valueOf有限定值,超出部分会进行new,其他基本数据类型同样有限定值
Integer e = 200;
Integer f = 200;
System.out.println(e == f);
// 输出true,拆箱后为基本数据类型,比较两个值
System.out.println(e.intValue() == f.intValue());
}
}
2、"euqals"比较的是二者内容是否相等
package other;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
String a = "test";
String b = "test";
String c = new String("test");
//返回true,二者内容一致
System.out.println(a.equals(b));
//返回true,二者内容一致,不受内存地址影响
System.out.println(a.equals(c));
}
}
3、进行比较时要注意非空判断;重写equals时要重写hashCode,因为两个值相等不代表hashCode即哈希码相等,相反hashCode相等,对象一定相等;以HashSet为例,新加入的对象优先判断hashCode是否相等,如果相等再调用equlas进行判断是否真的相等,以此提升equlas效率。