对象传递中的引用传递问题
参考mercReBilling 重新开票方法
equals == hashCode
public static void main(String[] args) {
// Object类 是对象最顶层的,使用 == 对比的是地址值
// 使用equals没被重写对比的也是地址值,使用hashCode() 获取的是哈希值,自然也不一样。
// 如果自己创建的对象重写过了这两个方法,可能对比的就是具体的内容了。
Object a = new Object();
Object b = new Object();
System.out.println(a.equals(b)); // false
System.out.println(a == b); // false
System.out.println(a.hashCode() == b.hashCode()); // false
// 对象传递,传递的是地址值引用,所以结果都是true
Object c = a;
System.out.println(a.equals(c)); // true
System.out.println(a == c); // true
System.out.println(a.hashCode() == c.hashCode()); // true
System.out.println("===================================");
// Double 重写了equals和hashCode方法,对比的是具体的内容,所以结果都是true; == 对比的是地址值
Double d1 = 1.0;
// Double d2 = new Double(1.0);
Double d2 = 1.0;
System.out.println(d1.equals(d2)); // true
System.out.println(d1 == d2); // false
System.out.println(d1.hashCode() == d2.hashCode()); // true
System.out.println("===================================");
//
Double d4 = d2;
System.out.println(d2.equals(d4)); // true
System.out.println(d2 == d4); // true
System.out.println(d2.hashCode() == d4.hashCode()); // true
System.out.println("===================================");
// Integer 不一样,-128~127有常量池,所以结果都是true; == 对比的是地址值相同
Integer i1 = 1;
Integer i2 = 1;
Integer i3 = new Integer(1);
System.out.println(i1.equals(i2)); // true
System.out.println(i1 == i2); // true
System.out.println(i1.hashCode() == i2.hashCode()); // true
System.out.println("===================================");
System.out.println(i1.equals(i3)); // true
System.out.println(i1 == i3); // false
System.out.println(i1.hashCode() == i3.hashCode()); // true
}