Java数据类型
外观
Java数据类型[编辑 | 编辑源代码]
Java数据类型是Java编程语言中用于声明变量或对象的类型系统,它定义了数据的存储方式、操作规则以及取值范围。Java是静态类型语言,所有变量必须先声明类型后使用。数据类型分为两大类:基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。
基本数据类型[编辑 | 编辑源代码]
Java的8种基本数据类型是语言内置的,直接存储值而非引用。它们按用途可分为四类:
整数类型[编辑 | 编辑源代码]
类型 | 大小(字节) | 取值范围 | 默认值 |
---|---|---|---|
byte |
1 | -128 到 127 | 0 |
short |
2 | -32,768 到 32,767 | 0 |
int |
4 | -231 到 231-1 | 0 |
long |
8 | -263 到 263-1 | 0L |
示例代码:
public class IntegerExample {
public static void main(String[] args) {
byte smallNumber = 100;
int mediumNumber = 100000;
long bigNumber = 10000000000L; // 注意L后缀
System.out.println("byte值: " + smallNumber);
System.out.println("int值: " + mediumNumber);
System.out.println("long值: " + bigNumber);
}
}
输出:
byte值: 100 int值: 100000 long值: 10000000000
浮点类型[编辑 | 编辑源代码]
类型 | 大小(字节) | 精度 | 默认值 |
---|---|---|---|
float |
4 | 6-7位有效数字 | 0.0f |
double |
8 | 15位有效数字 | 0.0d |
科学计算示例:
float piFloat = 3.1415927f; // 注意f后缀
double piDouble = 3.141592653589793;
System.out.println("float圆周率: " + piFloat);
System.out.println("double圆周率: " + piDouble);
字符类型[编辑 | 编辑源代码]
char
:2字节,存储Unicode字符,默认值\u0000
- 表示方式:
* 直接字符:'A'
* Unicode值:'\u0041'
* 转义字符:'\n'
布尔类型[编辑 | 编辑源代码]
boolean
:1位,只有true
/false
,默认值false
- 不能与整数类型互换(不同于C语言)
引用数据类型[编辑 | 编辑源代码]
引用类型存储对象的内存地址,包括:
- 类(如
String
) - 接口
- 数组
- 枚举
字符串示例:
String message = "Hello Java";
int[] numbers = {1, 2, 3}; // 数组也是引用类型
System.out.println(message.length()); // 输出:10
System.out.println(numbers[0]); // 输出:1
类型转换[编辑 | 编辑源代码]
自动类型转换(隐式)[编辑 | 编辑源代码]
小类型→大类型自动转换:
强制类型转换(显式)[编辑 | 编辑源代码]
大类型→小类型需强制转换,可能丢失精度:
double price = 9.99;
int intPrice = (int) price; // 结果为9,丢失小数部分
内存模型[编辑 | 编辑源代码]
实际应用案例[编辑 | 编辑源代码]
场景:电商系统商品库存管理
public class Product {
private long id; // 商品ID(大范围)
private String name; // 商品名称(引用类型)
private float price; // 价格(带小数)
private int stock; // 库存(整数)
private boolean available;// 是否上架
// 构造方法和方法省略...
}
常见问题[编辑 | 编辑源代码]
- Q:
float
和double
如何选择?
* A:金融计算优先用BigDecimal
,普通计算优先用double
- Q:
char
能存储中文吗?
* A:可以,Java的char
使用UTF-16编码,一个中文占1个char
进阶知识[编辑 | 编辑源代码]
- 值传递 vs 引用传递:基本类型按值传递,引用类型按引用传递
- 自动装箱/拆箱:基本类型与包装类(如
int
↔Integer
)的自动转换 - 类型默认值规则:
* 类成员变量:有默认值 * 局部变量:必须显式初始化