优秀的编程知识分享平台

网站首页 > 技术文章 正文

Java(面试)——Integer 和 int 有什么区别(源码分析)?

nanyue 2024-08-13 07:59:42 技术文章 7 ℃

从类型上说

Integer 是引用数据类型,而 int是基本数据类型

如果Integer为成员变量(图片中会讲)初始值是null,而int为成员变量初始值是0

举个现实的列子:就拿考试来说,用Integer就可以表示缺考还是考0分;

Java 为每个原始类型提供了包装类型

从JDK 1.5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

原始类型: boolean,char,byte,short,int,long,float,double

包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

值比较问题

首先需要注意的是i1、i2、i3、i4四个变量都是Integer对象,所以下面的==运算比较的不是值而是引用。

java在编译Integer i2 = 100;的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存;如果看看valueOf的源代码就知道发生了什么。

IntegerCache是Integer的内部类,其代码如下所示:

简单的说,如果值在-128到127之间,那么不会new新的Integer对象,而是直接引用常量池中的Integer对象,所以上面的测试中中i1==i2的结果是true,而i3==i4的结果是false。

说明

我也是一个Java小白,如果说的不对的话,望大神指教,谢谢!

Tags:

最近发表
标签列表