- ~
如下程序段的输出结果为:java
public class EqualsMethod { public static void main(String[] args) { Integer n1 = new Integer(47); Integer n2 = new Integer(47); System.out.print(n1 == n2); System.out.print(","); System.out.println(n1 != n2); } }
正确答案: B
A false,false
B false,true
C true,false
D true,true缓存
使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,做为基本类型。 使用Integer a = new Integer(1); 时,不管值是多少,都做为对象。
有些人说的看源码选C,这里有个误区所谓的缓存,是在使用valueOf的时候使用的, Integer n3 = Integer.valueOf(47) Integer n4 = Integer.valueOf(47); 这里的n3==n4才是true。 若是直接使用new一个对象,从构造函数来看: public Integer(int value) { this.value = value; } 就是彻底不一样的两个对象,没有使用所谓的缓存。
有以下4条语句:()函数
Integer i01=59; int i02=59; Integer i03=Integer.valueOf(59); Integer i04=new Integer(59);
如下输出结果为false的是:
正确答案: C
A System.out.println(i01==i02);
B System.out.println(i01==i03);
C System.out.println(i03==i04);
D System.out.println(i02==i04);this
①不管如何,Integer与new Integer不会相等。不会经历拆箱过程, ②两个都是非new出来的Integer,若是数在-128到127之间,则是true,不然为false java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存 ③两个都是new出来的,都为false ④int和integer(不管new否)比,都为true,由于会把Integer自动拆箱为int再去比