一、数据类型分类
Java 中变量的数据类型分为两大类:
- 基本数据类型:包括整数类型、浮点数类型、字符类型、布尔类型。
- 引用数据类型:包括数组、类、接口、枚举、注解、记录。
二、基本数据类型详解
1. 整数类型:byte、short、int、long
- 特点:各整数类型有固定的表数范围和字段长度,不受具体操作系统影响,保证 Java 程序的可移植性。
- 具体信息:
类型 | 字节数 | 表数范围 | 说明 |
---|---|---|---|
byte | 1 | -128 ~ 127 | 最小的整数类型 |
short | 2 | -32768 ~ 32767 | |
int | 4 | -2147483648 ~ 2147483647 | 程序中变量通常声明为此类型,整型常量默认为 int 型 |
long | 8 | -9223372036854775808 ~ 9223372036854775807 | 定义时需以 “l” 或 “L” 为后缀;若常量值超过 int 范围,必须加 L,否则编译不通过 |
2. 浮点类型:float、double
- 特点:有固定的表数范围和字段长度,不受操作系统影响。
- 具体信息:
类型 | 字节数 | 表数范围(近似) | 说明 |
---|---|---|---|
float | 4 | -3.403E38 ~ 3.403E38 | 单精度,尾数可精确到 7 位有效数字;定义时需以 “f” 或 “F” 为后缀 |
double | 8 | -1.798E308 ~ 1.798E308 | 双精度,精度是 float 的两倍,通常采用此类型;浮点型常量默认为 double 型 |
- 表示形式:
- 十进制数形式:如 5.12、512.0f、.512(必须有小数点)
- 科学计数法形式:如 5.12e2、512E2、100E-2
- 精度说明:
- 并非所有小数都能精确用二进制浮点数表示,不适合不容许舍入误差的金融计算,需用
BigDecimal类
。
- 并非所有小数都能精确用二进制浮点数表示,不适合不容许舍入误差的金融计算,需用
3. 字符类型:char
- 特点:占 2 字节,使用 Unicode 编码,可存储字母、汉字或其他书面语字符。
- 表现形式:
- 形式 1:单引号 (‘ ‘) 括起来的单个字符,如
char c1 = 'a';
、char c2 = '中';
- 形式 2:Unicode 值表示,即‘uXXXX’(XXXX 为十六进制整数),如
u0023
表示 ‘#’ - 形式 3:转义字符‘’,将其后字符转为特殊字符,常见转义字符如下:
- 形式 1:单引号 (‘ ‘) 括起来的单个字符,如
转义字符 | 说明 | Unicode 表示 |
---|---|---|
n |
换行符 | u000a |
t |
制表符 | u0009 |
" |
双引号 | u0022 |
' |
单引号 | u0027 |
\ |
反斜线 | u005c |
b |
退格符 | u0008 |
r |
回车符 | u000d |
- 运算特性:可进行运算,因对应 Unicode 码,可视为数值。
4. 布尔类型:boolean
- 特点:用于判断逻辑条件,仅两个值:
true
、false
,无其他值。 - 使用场景:常用于流程控制语句(if、while、for、do-while)。
- 注意:不可用 0 或非 0 整数替代,与 C 语言不同;Java 虚拟机中用 int 代替(true 为 1,false 为 0)。
三、基本数据类型变量间运算规则
1. 自动类型提升
- 规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)的类型。
- 具体场景:
- 存储范围小的值(常量、变量、表达式结果)赋值给存储范围大的变量时,如
int i = 'A';
、double d = 10;
。 - 不同范围类型混合运算时,按最大类型运算,如
double sum = int值 + byte值 + double值;
。 - byte、short、char 变量算术运算时,按 int 类型处理,如
byte b1 = 1; byte b2 = 2; int sum = b1 + b2;
(直接用 byte 接收会编译报错)。
- 存储范围小的值(常量、变量、表达式结果)赋值给存储范围大的变量时,如
2. 强制类型转换
- 规则:将取值范围大(或容量大)的类型强制转换为取值范围小(或容量小)的类型,需手动执行。
- 格式:
数据类型1 变量名 = (数据类型1)被强转数据值;
(() 中类型需 <= 被强转数据类型)。 - 注意:
- 可能损失精度或溢出,如
int i = (int)3.14;
(损失精度)、byte b = (byte)200;
(溢出)。 - 提升类型时的强制转换无风险,通常省略,如
double bigger = (double)(i/j);
(i、j 为 int)。
- 可能损失精度或溢出,如
3. 与 String 类型的运算
- String 类型:引用数据类型,用
""
表示,可包含 0 个、1 个或多个字符。 - 运算规则:
- 任意基本数据类型与 String 进行 “+” 运算,结果为 String 类型,如
System.out.println("" + 1 + 2);
输出 “12”。 - String 不能通过强制类型转换为其他类型,需借助包装类方法(如
int num = Integer.parseInt("123");
)。
- 任意基本数据类型与 String 进行 “+” 运算,结果为 String 类型,如