为什么java用integer(十个人有九个答不上来)

在说int和Integer的区别之前,先要弄清楚两个问题:

一、java基本数据类型及其封装类

二、java自动拆箱和自动装箱

java自动拆箱和自动装箱

  • 1、自动装箱
  • 自动装箱其实就是将基本数据类型转换为引用数据类型(对象)
  • 2、自动拆箱
  • 自动拆箱其实就是将引用数据类型转化为基本数据类型

int 和 Integer的区别

  • 分析
  • int
  • Integer
  • int 与 Integer 的区别
  • 相同值下的 int 和 Integer 的比较结果
分析

int

int 是java的基本数据类型。

Integer

Integer 继承了Object类,是对象类型,是 int 的包装类。

int 与 Integer 的区别

值的存储

int 存储在栈中

Integer 对象的引用存储在栈空间中,对象的数据存储在堆空间中。

初始化

int 初始化值为0。

Integer 初始化值为null。

传参

int 是值传递,栈中的数据不可变。

Integer 对象是引用传递,引用不可变,但是引用指向的堆空间地址中的值是可以改变的。

泛型支持

泛型不支持int,但是支持Integer。

运算

int 可以直接做运算,是类的特性。

1:a == b 吗? 废话,肯定不相等。两个new出来的对象地址不一样。

2:c == d 吗? 这个也是废话,都是基本数据类型的值肯定相等。

3:现在的关键问题是 e == f 吗? g == h 吗?

答案是:e == f; g != h。为什么会出现这种情况?因为ava在进行编译时 Integer g = 130会被编译成 Integer.valueOf(130) ,这个可以通过反编译class文件看到。而通过Integer源码可以得出,Integer.valueOf() 方法会在数值-128~127之间会对Integer进行缓存,不会再重新new一个,所以 e==f ;当数值二大于127或者小于-128的时候则会重新new一个,所以g != h 。

Integer的valueOf方法如下

为什么java用integer(十个人有九个答不上来)(1)

4:c == e 吗, i == j 吗?

答案都是相等的。因为封装类和基本数据类型进行比较的时候,java会自动拆箱,然后比较数值是 否相等。

综上,我们可以得出几个结论:

1、都是封装类,都是new出来的,肯定不相等。因为对象的内存地址不一样。

2、都是封装类,都不是new出来的,如果值在-128~127之间,那就相等,否则不相等。

3、如果是封装类和基本类型进行比较,只要数值相等那就相等,否则就不相等。因为封装类和基本数据类型进行比较的时候会有一个自动拆箱操作。

4、都是基本数据类型,如果数值相等,那就相等;否则不相等。


新课29.9元限时优惠至10元

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页