【333天】我爱刷题系列092(2018.01.04)

叨叨两句

  1. ~

牛客网——java专项练习071

1

如下程序段的输出结果为: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;
    }
就是彻底不一样的两个对象,没有使用所谓的缓存。

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);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再去比
相关文章
相关标签/搜索