📚 目录
🔍 数据类型概述
Java语言数据类型分为两大类:
Java数据类型
基本类型
引用类型
数值型
非数值型
整数类型
浮点类型
byte,short,int,long
float,double
char,boolean
类,接口,数组,枚举,字符串等
📌 8大基本数据类型详解
全面参数对照表
数据类型 | 位数 | 字节 | 默认值 | 最小值 | 最大值 | 包装类 |
---|---|---|---|---|---|---|
byte | 8 | 1 | 0 | -128 | 127 | Byte |
short | 16 | 2 | 0 | -32768 | 32767 | Short |
int | 32 | 4 | 0 | -2^31 | 2^31-1 | Integer |
long | 64 | 8 | 0L | -2^63 | 2^63-1 | Long |
float | 32 | 4 | 0.0f | 1.4E-45 | 3.4028235E38 | Float |
double | 64 | 8 | 0.0d | 4.9E-324 | 1.7976931348623157E308 | Double |
char | 16 | 2 | '\u0000' | 0 | 65535 | Character |
boolean | 1* | - | false | - | - | Boolean |
*注:boolean的存储长度依赖于JVM实现
🎁 自动装箱与拆箱
自动转换原理
// 装箱:基本类型 -> 包装类 Integer a = 100; // 实际执行:Integer.valueOf(100) // 拆箱:包装类 -> 基本类型 int b = a; // 实际执行:a.intValue()
缓存机制揭秘
Integer i1 = 127; Integer i2 = 127; System.out.println(i1 == i2); // true(使用缓存) Integer i3 = 128; Integer i4 = 128; System.out.println(i3 == i4); // false(新建对象)
🔄 类型转换规则
自动类型提升金字塔
byte → short → int → long → float → double ↑ char
强制转换风险示例
double d = 100.04; long l = (long)d; // 正确,得到100 int i = (int)l; // 正确,得到100 double bigD = 1.7e308; float f = (float)bigD; // 溢出为无限大
💾 内存分配机制
-
基本类型:直接存储在栈内存(局部变量)或堆内存(作为对象成员)
-
引用类型:对象实体在堆,引用变量在栈
-
常量池:存储编译期确定的字面量
🧰 包装类深度解析
源码关键点
// Integer.valueOf源码 public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
特殊值处理
Double.NaN // 非数字 Double.POSITIVE_INFINITY // 正无穷 Double.NEGATIVE_INFINITY // 负无穷
🚀 JDK新特性
1. var类型推断(JDK10+)
var list = new ArrayList<String>(); // 自动推断为ArrayList<String> var stream = list.stream(); // 推断为Stream<String>
2. switch表达式类型匹配(JDK17预览)
Object obj = 3.14; String desc = switch(obj) { case Integer i -> "整数: " + i; case Double d -> "小数: " + d; default -> "未知类型"; };
⚠️ 常见数值陷阱
1. 浮点数精度丢失
System.out.println(0.1 + 0.2); // 0.30000000000000004
2. 整数溢出
int max = Integer.MAX_VALUE; System.out.println(max + 1); // -2147483648
🏆 最佳实践指南
-
数值计算准则:
-
财务计算使用BigDecimal
-
超过long范围用BigInteger
-
优先使用基本类型提升性能
-
-
类型选择策略:
需要精确计算
BigDecimal
整数运算
不超过127用byte
常用数值用int
大数值用long
-
性能优化技巧:
// 预先计算常用值 static final Integer[] cache = new Integer[256]; static { for(int i=0; i<256; i++) cache[i] = i; } // 批量操作避免自动装箱 int sum = 0; List<Integer> list = /* ... */; for(Integer num : list) { sum += num; // 每次拆箱降低性能 }