杰瑞科技汇

Java基本数据类型取值范围怎么记?

在 Java 中,基本数据类型分为四大类:整数类型浮点类型字符类型布尔类型

Java基本数据类型取值范围怎么记?-图1
(图片来源网络,侵删)

整数类型

整数类型用于表示没有小数部分的数字。

数据类型 占用字节数 取值范围 (十进制) 默认值 备注
byte 1 字节 (8 位) -128 ~ 127 0 最小的整数类型,常用于节省内存,特别是在处理大数组时。
short 2 字节 (16 位) -32,768 ~ 32,767 0 较少使用,除非有特定的内存限制或与特定 API(如旧版 Windows API)交互。
int 4 字节 (32 位) -2,147,483,648 ~ 2,147,483,647 0 最常用的整数类型,在大多数情况下,只要不是处理极大或极小的数字,都应使用 int
long 8 字节 (64 位) -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 0L 用于表示超出 int 范围的大整数。注意:定义 long 类型常量时,需要在数字后加 Ll(推荐大写 L,因为小写 l 容易被误认为是数字 1)。

取值范围计算规则

对于有符号的整数类型(byte, short, int, long),其取值范围遵循以下规则:

  • 最小值: -2(位数-1)
  • 最大值: 2(位数-1) - 1

示例 (以 int 为例):

  • 位数: 32
  • 最小值: -2(32-1) = -231 = -2,147,483,648
  • 最大值: 2(32-1) - 1 = 231 - 1 = 2,147,483,647

浮点类型

浮点类型用于表示带有小数部分的数字,即实数。

Java基本数据类型取值范围怎么记?-图2
(图片来源网络,侵删)
数据类型 占用字节数 取值范围 (约数) 默认值 备注
float 4 字节 (32 位) 大约 ±3.40282347E+38F (有效位数为 6-7 位) 0f 单精度浮点数,当需要节省内存且对精度要求不高时使用(如图形学)。注意:定义 float 常量时,需要在数字后加 Ff
double 8 字节 (64 位) 大约 ±1.79769313486231570E+308 (有效位数为 15 位) 0d 双精度浮点数,是 Java 中默认的浮点类型,提供了更高的精度和更大的范围,适用于绝大多数科学计算和商业计算。

关于浮点数的精度

浮点数在计算机中是以科学计数法的形式存储的,由符号尾数(有效数字)和指数组成。

  • float 的有效数字(尾数)大约是 6 到 7 位十进制数。
  • double 的有效数字(尾数)大约是 15 位十进制数。

这意味着,如果你用 float 来存储一个超过 7 位有效数字的数,后面的数字可能会不准确。

// 浮点数精度示例
float f = 1234567.89f; // float 只有约7位有效数字
System.out.println(f); // 输出可能是 1234567.9
double d = 123456789012345.0; // double 有约15位有效数字
System.out.println(d); // 输出 1.23456789012345E14 (科学计数法)

字符类型

数据类型 占用字节数 取值范围 默认值 备注
char 2 字节 (16 位) \u0000 (0) 到 \uffff (65,535) '\u0000' 表示一个 Unicode 字符,可以存储任何单个字符,如 'A', '中', '1' 等。

char 类型使用 Unicode 编码,因此可以表示世界上大多数语言的字符,它的值用单引号括起来。


布尔类型

数据类型 占用字节数 取值范围 默认值 备注
boolean 理论上未定义 (JVM 实现相关) truefalse false 只有两个值:truefalse,用于逻辑判断,通常用于控制 if 语句、for 循环和 while 循环等。

注意boolean 类型在 Java 虚拟机中没有明确定义的内存大小(如 1 字节或 4 字节),这取决于具体的 JVM 实现。不应该假设 boolean 占用 1 个字节,并用它来计算数组或数据结构的大小。

Java基本数据类型取值范围怎么记?-图3
(图片来源网络,侵删)

总结表格

数据类型 大小 (字节) 范围 默认值 包装类
byte 1 -128 ~ 127 0 java.lang.Byte
short 2 -32,768 ~ 32,767 0 java.lang.Short
int 4 -231 ~ 231-1 0 java.lang.Integer
long 8 -263 ~ 263-1 0L java.lang.Long
float 4 ~ ±3.4E+38 0f java.lang.Float
double 8 ~ ±1.8E+308 0d java.lang.Double
char 2 \u0000 ~ \uffff '\u0000' java.lang.Character
boolean 未定义 true / false false java.lang.Boolean

重要概念:自动类型提升

当不同类型的数据进行混合运算时,Java 会自动将精度较低的类型提升到精度较高的类型,以避免精度损失,提升的规则如下:

  1. byte, short, char 参与运算,它们会先被提升为 int 类型。
  2. 如果运算中有 long 类型,整个表达式会被提升为 long
  3. 如果运算中有 float 类型,整个表达式会被提升为 float
  4. 如果运算中有 double 类型,整个表达式会被提升为 double
byte b = 10;
short s = 100;
int result1 = b + s; // b 和 s 都被提升为 int,result1 必须是 int 类型
int i = 1000;
long l = 10000L;
long result2 = i + l; // i 被提升为 long,result2 必须是 long 类型
double d = 10.5;
int result3 = (int)(i + d); // i 被提升为 double,结果是 double,需要强制类型转换 (int) 才能存回 int 变量
分享:
扫描分享到社交APP
上一篇
下一篇