杰瑞科技汇

Java基本数据类型取值范围有哪些?

总结表格

这是一个快速参考表,涵盖了所有 8 种基本数据类型的关键信息。

Java基本数据类型取值范围有哪些?-图1
(图片来源网络,侵删)
数据类型 大小 (字节) 默认值 取值范围 包装类
byte 1 0 -128 ~ 127 java.lang.Byte
short 2 0 -32,768 ~ 32,767 java.lang.Short
int 4 0 -2,147,483,648 ~ 2,147,483,647 java.lang.Integer
long 8 0L -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 java.lang.Long
float 4 0f 约 ±3.40282347E+38F (精度约 6-7 位小数) java.lang.Float
double 8 0d 约 ±1.7976931348623157E+308 (精度约 15 位小数) java.lang.Double
char 2 '\u0000' '\u0000' (0) ~ '\uffff' (65,535) java.lang.Character
boolean 1 (理论) false true / false java.lang.Boolean

各数据类型详解

整数类型

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

类型 大小 (位) 取值范围 说明
byte 8 -128 ~ 127 在处理大型数组时,可以节省内存,因为它占用空间最小。
short 16 -32,768 ~ 32,767 很少使用,int 是更好的选择。
int 32 -2³¹ ~ 2³¹-1
即 -2,147,483,648 ~ 2,147,483,647
最常用的整数类型,在大多数情况下,默认选择 int
long 64 -2⁶³ ~ 2⁶³-1
即 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
用于表示 int 范围不够大的整数,例如时间戳、大文件大小等。注意:定义 long 类型变量时,数值后需要加 Ll,推荐使用 L 以避免与数字 1 混淆。

示例代码:

int myInt = 123456789;
long myLong = 1234567890123L; // 必须加 L
// 检查取值范围
System.out.println("Integer.MAX_VALUE: " + Integer.MAX_VALUE); // 2147483647
System.out.println("Integer.MIN_VALUE: " + Integer.MIN_VALUE); // -2147483648
System.out.println("Long.MAX_VALUE: " + Long.MAX_VALUE);
System.out.println("Long.MIN_VALUE: " + Long.MIN_VALUE);

浮点类型

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

类型 大小 (位) 取值范围 说明
float 32 约 ±3.40282347E+38F 单精度浮点数,占用空间小,但精度较低(约 6-7 位有效数字)。注意:定义 float 类型变量时,数值后需要加 fF
double 64 约 ±1.7976931348623157E+308 双精度浮点数,占用空间是 float 的两倍,但精度更高(约 15 位有效数字)。默认选择,除非有特殊性能或内存要求。

示例代码:

Java基本数据类型取值范围有哪些?-图2
(图片来源网络,侵删)
float myFloat = 123.456f; // 必须加 f
double myDouble = 123.4567890123;
// 检查取值范围
System.out.println("Float.MAX_VALUE: " + Float.MAX_VALUE);
System.out.println("Double.MAX_VALUE: " + Double.MAX_VALUE);
// 精度演示
float a = 123.456789f;
double b = 123.456789;
System.out.println("Float a: " + a);  // 可能会丢失精度,输出 123.45679
System.out.println("Double b: " + b); // 精度更高,输出 123.456789

字符类型

类型 大小 (位) 取值范围 说明
char 16 '\u0000' (0) ~ '\uffff' (65,535) 用于表示单个字符,它是一个 无符号 的 16 位 Unicode 字符,可以存储世界上大多数语言的字符。

示例代码:

char myChar = 'A';
char myChar2 = '中'; // Java 内部使用 Unicode 编码
char myChar3 = '\u0041'; // Unicode 表示法,等同于 'A'
System.out.println(myChar);    // 输出 A
System.out.println(myChar2);   // 输出 中
System.out.println(myChar3);   // 输出 A

布尔类型

类型 大小 (位) 取值范围 说明
boolean (未严格规定) true / false 只有两个值:truefalse,用于逻辑判断。注意boolean 的大小在 JVM 规范中未明确定义,理论上可以是 1 bit,但在实践中(如 HotSpot JVM)通常会被虚拟机优化为使用 4 字节(int)或 1 字节(byte)来存储。

示例代码:

boolean isJavaFun = true;
boolean isFishTasty = false;
if (isJavaFun) {
    System.out.println("Java is fun!");
}

重要补充

如何计算取值范围?

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

  • 最大值: 2^(n-1) - 1
  • 最小值: -2^(n-1)

n 是该类型所占的位数。

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

int 为例(n=32):

  • 最大值: 2^(32-1) - 1 = 2^31 - 1 = 2,147,483,647
  • 最小值: -2^(32-1) = -2^31 = -2,147,483,648

类型转换

Java 中基本数据类型的转换分为两种:

  • 自动类型转换(隐式):当把一个范围小的数据类型赋值给范围大的数据类型时,Java 会自动进行转换,不会丢失精度。

    int i = 100;
    long l = i; // 自动从 int 转换为 long
  • 强制类型转换(显式):当把一个范围大的数据类型赋值给范围小的数据类型时,必须使用强制类型转换。这可能会导致精度丢失或数据溢出

    long l = 100L;
    int i = (int) l; // 必须强制转换
    // 溢出示例
    long bigLong = 2147483648L; // 超出了 int 的最大值
    int overflowedInt = (int) bigLong; // 溢出,结果会是负数
    System.out.println(overflowedInt); // 输出 -2147483648

希望这份详细的解释能帮助你完全理解 Java 基本数据类型的取值范围!

分享:
扫描分享到社交APP
上一篇
下一篇