int 和 Interger 比较的区别和注意事项

本文详细阐述了Java中int与Integer的区别,包括基本类型与包装类的概念、默认值、存储方式的不同,以及比较时的注意事项。并通过示例展示了自动装箱与拆箱的过程。

int 和 Interger 的区别

首先要知道 int 是八大基本类型之一( 其余七种:byte,char,short,int,long,float,double,boolean )
而 Interger 是类

  • Integer是int的包装类,int则是java的一种基本数据类型
  • Integer 是类,默认值为null,int是基本数据类型,默认值为0
  • Integer 实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
  • Integer变量必须先实例,int变量则可以直接使用

int 和 Interger 的比较

1.Integer变量是对一个Integer对象的引用,即得到起所属地址值,在两个通过new生成的Integer变量永远是不相等的,因为new生成的是两个对象,其内存地址不同。

Integer a= new Integer(110);
Integer b= new Integer(110);
//结果为false
System.out.print(a == b); 

2.Integer 类的自动装箱和自动拆箱
所谓自动装箱,就是把基本数据类型用他们对应的引用类型包装起来,使他们可以具有对象的特质。例如我们可以把int类型包装成Integer类型的,把double类型的包装成Double类型的。

所谓拆箱,就是进行与自动装箱相反的操作。

自动装箱的过程:当需要一种类型的对象时,这种基本数据类型就自动封装到与它对应的包装类中。

自动拆箱的过程:当需要一个数值时,被装箱的对象中的值就会被自动提取出来,没有必要再去调用intValue()和doubleValue()等方法。
示例:

//装箱是将一个原始数据类型赋值给相应封装类的变量。而拆箱则是将一个封装类的变量赋值给相应原始数据类型的变量。
int i1 = 1;  
int i2 = 1;  
Integer integer1 = new Integer(1);  
Integer integer2 = new Integer(1);  
//两个变量值相等
System.out.println("1:"+(i1 == i2));// true  
// integer1拆箱  
System.out.println("2:"+(i1 == integer1));// true  
// i装箱  
System.out.println("3:"+integer1.equals(i1));// true  
// 两个对象地址不一样  
System.out.println("4:"+(integer1 == integer2));// false  
// 两个对象值一样  
System.out.println("5:"+integer1.equals(integer2));// true  
          
/* 自动装箱规范要求-128=<boolean、byte、char <= 127, 介于-128~127之间的short和int被包装到固定对象中,
也就是就说,这些范围内的相同值对应同一个对象 */  
Integer integer3 = 10,integer4 = 10;  
System.out.println("6:"+(integer3 == integer4)); // true  
          
Integer integer5 = -129,integer6 = -129;  
System.out.println("7:"+(integer5 == integer6)); // false  
        
Integer integer7 = 128,integer8 = 128;  
System.out.println("8==地址比较:"+(integer7 == integer8)+"&8.equas值比较:"+integer7.equals(integer8)); 

//代码转载于:https://www.cnblogs.com/ckxlovejava/p/7890109.html

3.包装类Integer和基本数据类型int比较,java会自动拆包装为int,然后进行比较,故变为两个int变量的比较

int a = 110Integer b = new Integer(110);
//结果为true
System.out.print(a == b); 

4.非new生成的Integer变量和new Integer()生成的变量比较,因为非new生成的Integer变量指向的是java堆中的常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,所以两者在内存中的地址不同

Integer a = 110;
Integer b = new Integer(110);
//结果为false
System.out.print(a == b); 

5.两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false,原因和代码参考上述2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值