叨叨两句

  1. ~

牛客网——java专项练习071

1

以下程序段的输出结果为:

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;
    }
就是完全不同的两个对象,没有使用所谓的缓存。

2

有如下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);

  ①无论如何,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再去比

Wall_Breaker
2.1k 声望1.2k 粉丝

生死之间,就是我的跃迁之路,全程记录,欢迎见证