zoukankan      html  css  js  c++  java
  • 诡异的Integer

    先看下面的这个代码,为什么同样的都是赋值,却得不到同样的结果,也没有超出int的范围啊?这是为什么?

    package ppt_test;
    
    public class StrangeIntegerBehavior 
    {
    	public static void main(String[] args)
    	{        
    		Integer i1=127;       
    		Integer j1=127;       
    		System.out.println(i1==j1);        
    		Integer i2=128;        
    		Integer j2=128;        
    		System.out.println(i2==j2);    
    	}
    }
    

      原来是因为java中的int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0, 而Integer的默认值为null。

           Integer作为常量时,对于-128127之间的数,会进行缓存,也就是说int a1 = 127时,在范围之内,这个时候就存放在缓存中,当再创建a2时,java发现缓存中存在127这个数了,就直接取出来赋值给a2,所以a1==a2的。当超过范围就是new Integer()来new一个对象了,所以a、b都是new Integer(128)出来的变量,所以它们不等。

    © 版权声明
    文章版权归作者所有,未经允许请勿转载。
    THE END
  • 相关阅读:
    AHOI2012 信号塔 | 最小圆覆盖模板
    BZOJ1337 最小圆覆盖
    HAOI2014 走出金字塔
    HAOI2012 外星人
    HAOI2014 遥感监测
    HAOI2012 道路
    NOI2007 社交网络
    HAOI2012 高速公路
    HAOI2012 容易题
    HAOI2011 Problem c
  • 原文地址:https://www.cnblogs.com/xp-thebest/p/11704228.html
Copyright © 2011-2022 走看看