[Java-基础] 数据类型
2026年3月14日大约 3 分钟
[Java-基础] 数据类型
Java基本数据类型有哪些
- 数值型:整数(byte、short、int、long)和浮点(float、double)
- 字符型:char
- 布尔型:boolean
问题扩展
- 基本数据类型的字节数:1字节(byte,boolean),2字节(short、char),4字节(int、float)、8字节(long、double)
- 整数的基本数据类型为int,如果要声明long需要在元素后面加L
- 基本数据类型包装类,除了char和int是Character和Integer 以外,其他都是首字母大写
int和long是多少位,多少字节
- int:4字节,32位,最大值为231-1,最小值为-231
- long:8字节,64位,最大值为263-1,最小值为-263
int和long可以互转吗
可以
- int转long:自动类型转换,因为是安全的。
- long转int:需要强制类型转换,数据可能溢出。
数据类型的转换方式有哪些?
- 自动类型转换:当目标类型范围大于源类型时,会自动进行类型转换。
- 强制类型转换:当目标类型范围小于源类型时,需要使用强制类型转换,可能导致精度丢失或溢出。
- 字符串转其他类型:使用包装类的parse方法,如
Integer.parseInt()。 - 数据类型之间互转:使用包装类提供的方法,如
Integer.valueOf()。
类型互转可能出现的问题?
- 数据溢出:大范围转小范围时。
- 精度丢失:浮点转整数时。
- 对象类型转换异常:向下转型时,当对象类型不兼容时,抛出
ClassCastException。- 解决方法:使用
instanceof检查类型。
- 解决方法:使用
为什么用BigDecimal不用double
double是二进制浮点数,无法精确表示某些十进制小数,可能导致精度问题。
BigDecimal是精确计算的类。
创建BigDecimal对象时,要使用字符串作为参数;避免使用double,有精度问题。
装箱和拆箱是什么
装箱和拆箱就是基本数据类型和对应包装类进行转换的过程。
装箱:基本数据类型 -> 包装类
拆箱:包装类 -> 基本数据类型
现在这个过程都是自动进行的。
自动装箱的情况:
- 赋值时
- 方法调用时
Java为什么要有Integer等包装类?
就是为了解决基本数据类型的局限性
- 为了支持范型:因为范型只支持传入对象。
- 提供了丰富的方法:包装类提供了很多实用的方法,如
Integer.parseInt()、Integer.valueOf()等。
Integer相比int有什么优点?
- 可以为null:包装类可以表示null,而基本数据类型有初始值。
- 提供了丰富的方法:如
Integer.parseInt()、Integer.valueOf()等。
那为什么要保留基本数据类型呢?为什么不直接用包装类呢?
因为基本数据类型性能更好,占用内存更少,适合大量数据的处理。
说一下Integer的缓存
Java的Integer类会有一个静态缓存池,
默认缓存范围时在-128到127之间。
如果在这个范围内创建Integer对象,会直接从缓存池中返回相应的对象。