Java作为一门强类型语言,变量在定义时就需要明确数据类型。数据类型不仅决定了变量能存储什么值,还影响着运算规则和内存占用。今天我们就来聊聊最基础也最常用的三个基本数据类型:int(整数)、double(小数)、boolean(布尔值),看看它们的“真面目”以及使用时容易踩的坑。
1. int:整数的“舞台”¶
int 是用来存储没有小数部分的整数,比如年龄、考试分数、数组索引等场景。它在Java中是最常用的整数类型,占用4个字节(32位),取值范围由其存储方式决定。
1.1 取值范围¶
由于 int 是32位有符号整数,它的取值范围是 -2^31 到 2^31 - 1,具体数值是:
- 最小值:-2147483648
- 最大值:2147483647
可以简单理解为,int 能存储大约 -21亿到21亿 之间的整数。比如 123、-456、0 都是合法的 int 值。
1.2 常见使用场景¶
- 计数:比如统计用户点击次数
int clickCount = 100; - 索引:数组或集合的下标
int index = 5; - 年龄/分数:
int age = 25;或int score = 95;
1.3 容易踩的坑¶
-
溢出错误:如果赋值的整数超过
int的最大值,编译时就会报错。
示例:int a = 2147483648;(直接赋值会编译失败,因为2147483648超过了最大值2147483647)。
解决办法:用long类型存储更大的整数(比如long bigNum = 123456789012L;,注意加L后缀表示长整型)。 -
隐式溢出:即使不直接赋值,运算也可能导致溢出。
示例:int max = 2147483647;
int result = max + 1;// 结果会变成 -2147483648(因为超过32位有符号整数的最大值后会“循环”)。
注意:如果需要严格避免溢出,建议用long或BigInteger(但初学者先从基础类型开始)。
2. double:小数的“管家”¶
double 是用来存储带小数的数值(也叫浮点数),比如金额、身高、体重等需要精度的场景。它占用8个字节(64位),精度比 float(4字节)更高。
2.1 取值范围¶
double 的取值范围非常大,约为 ±1.7976931348623157E+308 到 ±4.9000000000000000E-324。简单来说,它能表示从极小的数(接近0)到极大的数(如1e300),远超 int 的范围。
2.2 常见使用场景¶
- 金额:
double price = 19.99; - 身高/体重:
double height = 175.5; - 温度:
double temp = 36.5;
2.3 容易踩的坑¶
-
精度问题:
double是二进制浮点数,无法精确表示所有小数(比如0.1在二进制中是无限循环的)。直接用==比较double可能得到“意外结果”。
示例:System.out.println(0.1 + 0.2);// 实际输出0.30000000000000004(而非预期的0.3)。
解决办法:如果需要精确比较,建议用BigDecimal(如BigDecimal.valueOf(0.1).add(BigDecimal.valueOf(0.2))),或比较两个数的差值是否小于极小值(如Math.abs(a - b) < 1e-9)。 -
溢出成“无穷大”:如果赋值的数超过
double的最大值,会变成Infinity(无穷大)。
示例:double maxDouble = Double.MAX_VALUE;
double overflow = maxDouble * 2;// 结果是Infinity(无穷大)。
3. boolean:逻辑的“开关”¶
boolean 是布尔类型,只有两个值:true(真)和 false(假),用来表示条件或状态,比如“是否登录”“是否完成”等。
3.1 取值范围¶
只有 true 和 false 两个值,没有其他可能。
3.2 常见使用场景¶
- 条件判断:
if (isLogin) { ... } - 循环控制:
while (isRunning) { ... } - 状态标记:
boolean isOpen = false;(表示“门是否打开”)
3.3 容易踩的坑¶
-
赋值错误:
boolean变量只能用true或false赋值,不能用1或0(虽然部分编译器可能“容忍”,但属于类型不匹配,严格来说是错误的)。
示例:boolean flag = 1;// 错误!应改为boolean flag = true; -
算术运算禁忌:
boolean不能参与算术运算。
示例:int a = 1 + true;// 编译错误!true是布尔值,不能和整数相加。
总结:选对类型,避免“翻车”¶
int:存整数,注意范围(别超过21亿),避免溢出。double:存小数,避免直接用==比较,优先用BigDecimal处理精度。boolean:存真假,只能用true/false,别用1/0赋值。
基本数据类型的选择没有“对错”,但需要根据实际需求:比如年龄用 int,金额用 double,开关用 boolean。记住:类型匹配是程序正确运行的基础,多写代码、多踩坑,才能熟练掌握!