int 和 Integer 的区别

1.Integer是int的包装类,int是Java的一种基本数据类型

延伸:Java中的基本数据类型:(1)四种整数类型:byte、short、int、long

                                                 (2)俩种浮点数类型:float、double

                                                 (3)一种字符类型:char

                                                 (4)一种布尔类型:Boolean(true、false)

2. Integer变量必须实例化以后才能使用,而int变量不需要

3.Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象,而int则是直接存储数据值

4.Integer默认值是null,int默认值是0

延伸:int类型变量和Integer类型变量比较,Integer类型变量之间比较

package test;

public class IntegerTest {

	public static void main(String[] args) {
		
		Integer i = new Integer(5);
		Integer j = new Integer(5);
		System.out.println(i==j);//false:new生成的俩个对象的内存地址不同
		
		int m = 5;
		Integer n = new Integer(5);
		Integer l = 5;
		System.out.println(m==n);//true:Integer变量和int变量比较时,Java会自动拆箱为int(n.intValue()),然后进行比较,所以只要俩个变量的值相等,比较结果就为true
		System.out.println(m==l);//true:理由同上
		
		Integer x = 5;//java在编译的时候会翻译成Integer x = Integer.valueOf(5),即装箱为Integer对象
		Integer y = new Integer(5);
		System.out.println(x==y);//false:非new生成的Integer变量指向的是常量池,new生成的Integer变量指向堆中新建的对象,俩者在内存中的地址不同,所以比较结果为false
		
		Integer p = 5;
		Integer q = 5;
		System.out.println(p==q);//true:自动装箱:对于从–128到127之间的值,它们被装箱为Integer对象后,会存在内存中被重用(这里面涉及到一种设计模式,叫享元模式),也就是说,其实此时p和q在内存中的地址是一样的,所以结果为true,而当相互比较的值大于127,他们在内存中的地址不会被共享,结果false.
		Integer a = 128;
		Integer b = 128;
		System.out.println(a==b);//false:俩个非new生成的Integer变量进行比较时,如果俩个变量在-127-128之间,则结果为true,否则为false,因为JDK源码的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);
		}
		对于-128到127之间的数,会进行缓存*/
	}

}

注:拆箱和装箱是JDK1.5版本新加的特性,之前的版本并不支持。

如果有错误的地方,还请指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值