==与equals的区别
1、equals的默认实现实际上使用了==来比较两个对象是否相等,但是equals对于integer、String等类的比较方法进行了重写,比较的是两个对象的内容是否相等。
2、==对于基本类型而言,比较值是否相等,对于对象而言,比较的是两个对象的地址是否相同(即是否指向同一个对象)。
1)对于integer,如果依然坚持用==来比较,有一些需要注意的地方。对于[-128,127]区间的数,有一个缓存,因此:
Integer a = 127;
Integer b = 127;
System.out.println(a == b); //true
Integer a = 128;
Integer b = 128;
System.out.println(a == b); //false
Integer a = new Integer(127);
Integer b = 127;
//(new一个对象,该对象会在堆上被新建)
System.out.println(a == b); //false
2)对于String,因为它有一个常量池,所以:
String a = 'aa' + 'bb';
String b = 'aabb';
System.out.println(a == b); //true
String a = 'aa' + 'bb';
String b = new String('aabb');
//(new一个对象,该对象会在堆上被新建)
System.out.println(a == b); //false