java中Int和Integer的比较

       Java学习如盖楼一样,必须打稳地基。在面试中许多你觉得简单的问题往往成了你的绊脚石,我在这里总结了一下基本数据类型Int和包装类型Integer,希望各位大神看到有什么不对的地方,及时指出,小生先谢过各位修炼多年的前辈了。

 

Java 有两大数据类型:

内置数据类型:8大基本类型,我就不一一列举了。

引用数据类型:除了8大基本类型,其它都是引用类型了。

int 数据类型是4个字节,32位、有符号的以二进制补码表示的整数;

最小值是 -2,147,483,648(-2^31);

最大值是 2,147,483,647(2^31 - 1);

一般地整型变量默认为 int 类型;

默认值是 0 ; int的变量名和数值都存储在栈内存中,且栈内存中的数据可以共享。

例子:int a = 10, int b = -10。

integer是int的封装类(包装类),还包含了很多与数据有关的方法,integer是引用堆内存的一个对象,变量名在栈内存

变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。

内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来储存该类型数据。

因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。

 

接下来对int型数据和Integer数据进行比较。

用==和equals比较,==是进行地址及值比较,无法对==操作符进行重载,而对于equals方法,Integer里面的equals方法重写了Object的equals方法,查看Integer源码可以看出equals方法进行的是数值比较。

Int a=10;               int c=200;

Integer b=10;       Integer d=200;

a==b?                   c==d?

a.equals(b)?        c.equals(d)?

包装类Integer和基本数据类型int比较的时候,java会自动拆包装类为int,然后进行比较,所以

所以a==b,true. a.equals(b),true.

直接赋值的Integer对象,其值存储在常量池,b和d指向的是常量池中的对象,进行比较时,如果两个变量的值在-128~127之间,结果为true。如果两个变量不在此区间,比较结果为false。

原因是Integer实现的时候 对于-128 到127之间的值会做缓存处理,Java里面对处在在-128~127之间的Integer值,用的是原生数据类型int,会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比

比如Integer d=10,a=10 那么a和b就直接比较数值了,因为常量池中b有缓存。而超出-128 到127这个范围,就不会缓存,而是新建一个对象。

所以 c==d,false, c.equeal(d),true.

 

Integer e= new Integer(10);

Integer f=new Integer(10);

e==f?

e.equals(f)?

E和f是new 出来的两个不同的对象地址不同,所以e==f?false,equals只比较数据中所以e.equals(f)?true.

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值