1. int和Integer的区别?为什么有包装类?
java
是一种强类型的语言,所以所有的属性都必须要有一个数据类型。
PS:
java
10有了局部变量类型推导,可以使用var来代替某个具体的数据类型,但是在字节码阶段,java的变量仍然有明确的数据类型,并且局部变量类型推导有许多限制和不完善的地方,所以不是目前主流的应用版本。
要说int
和Integer
的区别,要从java
的基本数据类型说起。
1.1 基本数据类型
在java
当中,一共有8种数据类型,其中有4种整形,2种浮点型,1中用于表示Unicode
编码的字符类型char
,和一种用于表示真假的boolean
类型
- 4种整型:int、short、long、byte
- 2种浮点型:float、double
- 字符类型:char
- 真假类型:boolean
1.2 包装类型及其作用
因为java
的设计理念是一切皆对象,在很多情况下,需要以对象的形式操作。比如getClass()
获取类。
1.2.1 包装类的作用
在java
当中,每个基本数据类型都对应了一个包装类,包装类的存在解决了基本数据类型无法做到的事情泛型类型参数、序列化、类型转换、高频区间数据缓存等问题。
基础类型 | 包装类型 |
int | Integer |
short | Short |
byte | Byte |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
1.3 int和Integer的区别
- 数据类型不同:
int
是基本数据类型,Integer
是包装数据类型 - 默认值不同:
int
默认值是0,而Integer
默认值是null
- 内存中存储方式不同:
int
在内存中直接存储的是数据值,而Integer
实际存储的是对象的引用,当new
一个Integer
时实际是生成一个指针指向此对象 - 实例化方式不同:
Integer
必须实例化才能使用,而int
不需要
- 变量的比较方式不同:
int
可以使用==
来判断是否相等,而Integer
一定要使用equals
来比较两个变量是否相等。
可能存在不足地方,希望大家提出。我们一起更正!!!
1.4 总结
Integer
是int
的包装类,它们区别主要体现在5个方面:数据类型不同、默认值不同、内存中的存储方式不同、实例化方式不同、变量比较的方式不同。包装类的存在解决了基本数据类型无法做到的事情。(泛型参数、序列化、类型转换、高频区间数据缓存等)