首页 > 编程知识 正文

int跟integer(java int integer)

时间:2023-05-06 15:42:10 阅读:87769 作者:1582

在说int和Integer的区别之前,必须弄清楚两个问题。

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

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

java自动开箱和自动装箱

1、自动装箱是将基本数据类型转换为参照数据类型(对象),自动装箱是转换为基本数据类型int和Integer的区别

分析Integerint和integerint不同值相同的int和integer的比较结果

分析

int

int是java的基本数据类型。

整合者

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

int和Integer的区别

存储值

int存储在堆栈中

对Integer对象的引用存储在堆栈区域中,而对象的数据存储在堆区域中。

初始化

int初始化值为0。

整数初始化值为空。

传达参考

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

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

通用支持

通用不支持int,但支持Integer。

运算

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

Integer对象可以调用此类的方法,但在打开箱子之前不能进行运算。 需要转换为基本型int。

int是基本数据类型,Integer是参照数据类型。

int的默认值为0,Integer的默认值为null;

int类型直接存储数值,Integer必须实例化对象,并指向对象的地址。

相同值下的int和Integer的比较结果

new生成的两个变量最终为false。

比较int和Integer的值,如果两者的值相等则为true。

注意:比较时,Integer会自动打开箱子作为int类型进行比较。 )

如果将new生成的Integer变量与new未生成的Integer变量进行比较,则结果为false。

注意: new生成的Integer变量的值位于堆区域中,而非new生成的Integer变量的值位于常量池中。 )

(注意:在new以外生成的Integer变量首先判断常量池中是否有该对象,如果有则共享,如果没有则将其放入常量池中; 也称为享元模式,稍后再谈。 )

如果比较非new生成的两个Integer对象,结果将为true。

(注意:此处必须假设值范围在- 128到127之间。

享受源模式—flyweight是基于java的int和Integer自动装箱和开箱模式之一,是为了加强简单数字的重用。

赋值时,实际上执行的是Integer的valueOf ()方法。

如果值在- 128到127之间,java会自动装箱并缓存值。 其次,如果有相同的值,则直接从缓存中取出后使用。 缓存由Integer的内部类IntegerCache进行。

如果超过该范围,对象将保存到堆中的new中。

PS :自动打包和开箱是在JDK1.5中进行的。

内部类集成缓存

这样做可以缓存简单的数字。

缓存数量的大小可以由-XX:AutoBoxCacheMax=控制。

初始化jvm时,可以将Java.lang.integer.integer cache.high属性设置为专用系统属性并进行保存。

规定了low属性的值:-128

让我们来看一个例子

1:a==b吗? 胡说,一定不相等。 出现2个new的对方地址不同。

2:c==d吗? 这也是无稽之谈,都是基本数据类型的值一定相等。

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

答案是e==f; g!=h 为什么会发生这种事? 由于在编译时将Integer g=130编译为integer.valueof(130 ),因此可以通过反编译class文件来查看ava。 由Integer源代码可知,Integer.valueOf ) )方法在数值-128~127之间缓存Integer,不再是new,因此e==f; 如果数值2大于127或小于-128,则需要再加一个新值,因此g!=h

整数的值方法如下

4 ) c==e还是i==j?

答案是一样的。 因为在比较封装类和基本数据类型时,java会自动打开箱子,比较数值是否相等。

综上所述,可以得出一些结论。

1、都是套装系,都是从new出来的,所以肯定不相等。 因为对象的内存地址不同。

2、都是包装系,并不是出了new。 如果值在- 128到127之间,则等于,否则不等于。

3、在比较包装类和基本类型时,如果数值相等,则其相等,否则不相等。 因为如果将封装的类与基本的数据类型进行比较,就会有自动开箱操作。

4、都是基本数据类型,数值相等则不相等。

新课在29.9元的期限内优惠到10元

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。