Integer 与 Int 的区别
Posted ccup
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Integer 与 Int 的区别相关的知识,希望对你有一定的参考价值。
Integer 类整形 与 Int 整形 的区别
最近在翻java的源码,发现了一些平常不注意,但很容易出错的东西,最近有空的话就整理出来。
Integer:是一个int的包装类,Integer变量的存储需要实例化Integer的实例对象,其默认值为 null。
原文:The Integer class wraps a value of the primitive type int in an object. An object of type Integer contains a single field whose type is int.
int:是一种原始的数据类型,直接存储数据值,其默认值为0。
后发现 在JAVA中 每个原始的类型都有一个等效的包装类,这些包装类都继承自Object类,所以也可以用于集合或者泛型。
byte has Byte short has Short int has Integer long has Long boolean has Boolean char has Character float has Float double has Double
integer 与 int的类型比较
通过new生成的:
1.两个New的Integer
1 Integer i = new Integer(100); 2 Integer j = new Integer(100); 3 System.out.print(i == j); 4 //source:false
解释:Integer是创建了两个实例的对象,比较时是对比两个对象的内存地址,所以不相符
2.New的integer与int
Integer i = new Integer(100); int j = 100; System.out.print(i == j); //source:true
解释:当integer变量和int变量进行对比时,只要值相等,则结果就是正确的。 java会对integer自动拆包转化类型为int,然后两个int类型进行对比。
非New生成的:
1.非new生成的Integer变量和new integer()生成的变量进行比较
Integer i = new Integer(100); Integer j = 100; System.out.print(i == j); //source=false
解释:非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同。
2.两个非new生成的Integer对象
结果: 如果两个变量的值在区间-128到127之间,则比较结果为true,
如果两个变量的值不在此区间,则比较结果为false
Integer i = 100; Integer j = 100; System.out.print(i == j); //source:true Integer i = 128; Integer j = 128; System.out.print(i == j); //source:false
解释:java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100),
//而java API中对Integer类型的valueOf的定义如下:
public static Integer valueOf(int i){ assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <= IntegerCache.high){ return IntegerCache.cache[i + (-IntegerCache.low)]; } return new Integer(i); }
java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。
以上
以上是关于Integer 与 Int 的区别的主要内容,如果未能解决你的问题,请参考以下文章