java integer初始化_JAVA 基础之Integer

jdk1.5后增加了自动拆箱和自动装箱特性。java的八种 byte,short,int,long,float,double,char,boolean基本类型和各自对应的包装类型的相互转化。

装箱指的是 int类型 变为 Integer实例对象,拆箱指的是 Integer实例 变为 int类型。

java.lang包下的类Integer。作为int基本类型的封装类。有以下特点。

一、

Integer a = 100;

Integer b = 100;

Integer c = 1000;

Integer d = 1000;

System.out.println(a == b);

System.out.println(c==d)

输出结果是:true false

分析:

(1)Integer a = 100;会自动掉用Integer的 valueOf(int i)方法进行自动装箱。当值i >=-128 && i < 127 时会调用已经初始化好的缓存中的Integer实例。

所以 System.out.println(a == b) 中 a、b指向相同Integer对象的实例

(2)Integer b = 1000, 虽然也会掉用Integer中valueOf(int i)方法进行自动装箱。但是值得范围不在缓存中。所以c 、d返回的是不同Integer对象的实例。

所以 System.out.println(c == d) 输出的结果为false

备注:jdk之所以这么设计是因为小数字[-128,127)访问频率比较高,放在缓存中提高Integer类的性能和效率。

Jdk中Integer类的源码如下:

1 /**

2 * Returns a Integer instance representing the specified3 * int value.4 * If a new Integer instance is not required, this method5 * should generally be used in preference to the constructor6 * {@link#Integer(int)}, as this method is likely to yield7 * significantly better space and time performance by caching8 * frequently requested values.9 *10 *@parami an int value.11 *@returna Integer instance representing i.12 *@since1.513 */

14 public static Integer valueOf(inti) {15 if(i >= -128 && i <=IntegerCache.high)16 return IntegerCache.cache[i + 128];17 else

18 return newInteger(i);19 }

1 private static classIntegerCache {2 static final inthigh;3 static finalInteger cache[];4

5 static{6 final int low = -128;7

8 //high value may be configured by property

9 int h = 127;10 if (integerCacheHighPropValue != null) {11 //Use Long.decode here to avoid invoking methods that12 //require Integer's autoboxing cache to be initialized

13 int i =Long.decode(integerCacheHighPropValue).intValue();14 i = Math.max(i, 127);15 //Maximum array size is Integer.MAX_VALUE

16 h = Math.min(i, Integer.MAX_VALUE - -low);17 }18 high =h;19

20 cache = new Integer[(high - low) + 1];21 int j =low;22 for(int k = 0; k < cache.length; k++)23 cache[k] = new Integer(j++);24 }25

26 privateIntegerCache() {}27 }

读了源码可以发现点,缓存数组的范围大小low是确定的-128,但是high可以通过jvm参数自行配置。

二、

Integer a = new Integer(1000);

Int b = 1000;

System.out.println(a == b);

输出结果为true;

分析:

当a 与 b进行 == 比较时,会将a自动拆箱为基本类型1000,所以结果为true;

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值