Java 数据类型全解析:基本类型、引用类型与类型转换
在 Java 编程世界里,数据类型是构建程序的基石。它们决定了数据的存储方式、操作方法以及程序的性能表现。本文将深入探讨 Java 的各种数据类型,包括基本数据类型、引用数据类型,以及它们之间的转换方式。
一、数据类型总览
Java 的数据类型分为两大类:基本数据类型与引用数据类型。其中,基本数据类型又被称为值类型。
- 基本数据类型:包括 6 种数字类型(byte、short、int、long、float、double)、1 种字符型(char)和 1 种布尔型(boolean)。这些类型只能存储自身类型的值,不具备其他额外功能。
- 引用数据类型:涵盖类(Class)、接口(Interface)和数组(Array)。在参数传递时,引用数据类型以拷贝引用地址的方式传递给接收变量,而非复制整个数据本体。除八大基本数据类型外,其他所有数据类型均为引用数据类型,其默认值为 null。
- 其他相关数据类型:例如字符串类型 String、枚举类型 Enum,它们是基于引用数据类型实现的。
为实现基本数据类型与引用数据类型的相互转换,充分利用彼此特性,Java 为每种基本数据类型提供了对应的包装类。包装类属于引用类型,对基本数据类型进行了封装,赋予了丰富的功能,是基本类型的拓展。包装类与基本数据类型一一对应,也有 8 种,分别为 Byte、Short、Integer、Long、Float、Double、Character、Boolean。
二、基本数据类型详解
2.1 类型概述
基本数据类型包括 :
-
6 种数字类型
-
4 种为整数型(byte、short、int、long)
-
2 种为浮点型(float、double)
-
-
1 种字符类型(char)
-
1 种布尔型(boolean)。
2.2 基本数据类型详解
基本类型 | 存储大小 | 初始化默认值 | 取值范围 | 包装类型 |
---|---|---|---|---|
byte | 1 字节(8 位) | 0 | -128 ~ 127 | Byte |
short | 2 字节(16 位) | 0 | -32768 ~ 32767 | Short |
int | 4 字节(32 位) | 0 | -2^31 ~ 2^31 - 1 | Integer |
long | 8 字节(64 位) | 0L(“L” 建议大写,以防与数字 “1” 混淆) | -2^63 ~ 2^63 - 1 | Long |
float | 4 字节(32 位) | 0.0f | 符合 IEEE754 标准的浮点数,1.4E - 45 ~ 3.4028235E38 | Float |
double | 8 字节(64 位) | 0.0d | 符合 IEEE754 标准的浮点数,4.9E - 324 ~ 1.7976931348623157E308 | Double |
char | 2 字节(16 位) | ‘\u0000’ | \u0000 ~ \uffff(十进制等效值为 0 ~ 65535,本质也是数值) | Character |
boolean | 1 字节(8 位)/4 字节(32 位) | false | true / false | Boolean |
需要注意的是,float 和 double 不能用于表示精确值,运算可能不精确,如需精确计算,可使用 BigDecimal。
char 类型可存储任何字符。
对于数值类型的取值范围,无需强行记忆,其值已以常量形式定义在对应的包装类中,例如:
public class DataTypeInfo {
public static void main(String[] args) {
// long
System.out.println("基本类型:long 二进制位数:" + Long.SIZE);
System.out.println("包装类:java.lang.Long");
System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE);
System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE);
System.out.println();
// double
System.out.println("基本类型:double 二进制位数:" + Double.SIZE);
System.out.println("包装类:java.lang.Double");
System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE);
System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE);
System.out.println();
// byte
System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE);
System.out.println("包装类:java.lang.Byte");
System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE);
System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE);
System.out.println();
// short
System.out.println("基本类型:short 二进制位数:" + Short.SIZE);
System.out.println("包装类:java.lang.Short");
System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE);
System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE);
System.out.println();
// int
System.out.println("基本类型:int 二进制位数:" + Integer.SIZE);
System.out.println("包装类:java.lang.Integer");
System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE);
System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE);
System.out.println();
// float
System.out.println("基本类型:float 二进制位数:" + Float.SIZE);
System.out.println("包装类:java.lang.Float");
System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE);
System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE);
System.out.println();
// char
System.out.println("基本类型:char 二进制位数:" + Character.SIZE);
System.out