美文网首页
Integer与int

Integer与int

作者: crossroads | 来源:发表于2020-10-28 17:46 被阅读0次
   Integer a=new Integer(1000);
   Integer b= new Integer(1000);
   System.out.println(a==b); //false,编译提示用equals
   System.out.println(a==1000);//true

    Integer c=new Integer(10);
    Integer d= new Integer(10);
    System.out.println(c==d); //false
    System.out.println(c==10); //true
    
     Integer e= 100000000;// 类似Integer.valueOf(int)
     Integer f= 100000000;// 类似Integer.valueOf(int)
     System.out.println(e==f); //false

     Integer e1=10; //类似Integer.valueOf(int)
     Integer f1=10; //类似Integer.valueOf(int)
     System.out.println(e1==f1);// true

    Integer number=3;
    Integer g=new Integer(3);
   System.out.println(g==number); //false
  System.out.println(g==3); //true
   

总结
两个new出来的一定是false,一个new出来的和一个非new出来的一定是false, 因为他们的内存地址不同;
两个非new出来的integer,-128-127是true,其他false,因为会从缓存中拿数据,其他的只能自己创建;

在装箱的时候自动调用的是Integer的valueOf(int)方法

    public static Integer valueOf(int i) {
            if (i >= IntegerCache.low && i <= IntegerCache.high)
                 return IntegerCache.cache[i + (-IntegerCache.low)];
            return new Integer(i);
   }

而在拆箱的时候自动调用的是Integer的intValue方法。

 public int intValue() {
      return value;
  }

那么hashmap中的key是Integer会如何呢?

   HashMap<Integer, String> map = new HashMap<>();
        Integer key = new Integer(200);
        Integer key2 = new Integer(200);
        map.put(key, "a");
        map.put(key2, "a2");
        System.out.println(key.hashCode()); // integer 重写了hashcode,返回的是value
        System.out.println(key2.hashCode());
        map.values().forEach(new Consumer<String>() {
            @Override
            public void accept(String integer) {
                  System.out.println(integer); // 结果只有一个a2 
            }
        });

对于hahsmap来说key并不一定是同一个对象,只要hashcode和内容相同,就认为是同一个key。这里也牵扯到为什么重写equals要重写hashcode,这个例子就是个很好的理由哦!
可以看楼主的hashmap源码分析或者自己看一下hashmap源码哦!

相关文章

网友评论

      本文标题:Integer与int

      本文链接:https://www.haomeiwen.com/subject/rdoapktx.html