一、基本数据类型
在Java共有八种基本数据类型
整数类型:
类型名称 | 占用字节数 | 数值范围 | 包装类 |
---|---|---|---|
byte | 1 | -128 到 127 | Byte |
short | 2 | -32768 到 32767 | Short |
int | 4 | -2,147,483,648 到 2,147,483,647 | Integer |
long | 8 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | Long |
浮点类型:
类型名称 | 占用字节数 | 数值范围 | 包装类 |
---|---|---|---|
float | 4 | ±3.40282347E+38F | Float |
double | 8 | ±1.7976931348623157E+308 | Double |
字符类型:
类型名称 | 占用字节数 | 数值范围 | 包装类 |
---|---|---|---|
char | 2 | 用于存储Unicode字符,范围是\u0000到\uffff | Character |
布尔类型:
类型名称 | 占用字节数 | 数值范围 | 包装类 |
---|---|---|---|
boolean | 1 | true 或者 false | Boolean |
二、包装类
包装类是将基本数据类型(如int、double、char等)封装在对象中的类。这些类提供了许多有用的功能,比如将基本类型转换为字符串,或者在需要时将对象转换为基本类型。
三、自动装箱缓存
在Java中,Integer
缓存的范围是从-128到127(包括-128和127)。这个范围被称为“缓存范围”。当你在这个范围内使用 Integer.valueOf(int)
方法时,JVM会返回缓存中的对象,而不是创建一个新的对象。
Integer a = 127; // 使用valueOf方法,返回缓存中的对象
Integer b = 127; // 同样返回缓存中的对象
System.out.println(a == b); // 输出true,因为它们是相同的对象
对于超出这个范围的整数,每次调用Integer.valueOf(int)
时,都会创建一个新的Integer
对象。
Integer i = new Integer(1);
Integer j = new Integer(1);
System.out.println(i == j); // 输出false
使用new Integer(int value)
构造方法会绕过自动装箱的缓存机制,总是创建一个新的对象。
对于其他包装类(如Byte
, Short
, Long
, Character
等),也有类似的缓存机制,但范围不同(例如,Byte
和Short
通常从-128到127缓存,而Long
没有自动装箱的缓存)。