在 Java 中,类型可以分为两大类:原始类型(Primitive Types) 和 引用类型(Reference Types)。原始类型是 Java 的基本数据类型,它们不是对象,并且直接存储值。引用类型则是指那些基于类的对象、数组等,它们存储的是指向实际对象的引用。
原始类型(Primitive Types)
Java 提供了八种原始类型,每一种都有固定的大小和含义。这些类型不是类,因此它们不具备面向对象的特性,如继承或方法调用。以下是这八种原始类型及其特点:
1. boolean
•用于表示真或假,只有两个可能的值:true 和 false。
•不可以直接与整数进行转换。
2. byte
•8 位有符号二进制补码整数。
•范围从 -128 到 127。
3. short
•16 位有符号二进制补码整数。
•范围从 -32,768 到 32,767。
4. int
•32 位有符号二进制补码整数。
•范围从 -2^31 到 2^31 - 1(即 -2,147,483,648 到 2,147,483,647)。
5. long
•64 位有符号二进制补码整数。•范围从 -2^63 到 2^63 - 1。
6. float
•32 位 IEEE 754 标准的单精度浮点数。
•适用于需要小数点后一位或两位精度的情况,但不推荐用于精确计算。
7. double
•64 位 IEEE 754 标准的双精度浮点数。
•默认的浮点数类型,提供更高的精度和更大的范围。
8. char
•16 位 Unicode 字符。•表示一个字符,使用单引号括起来,例如 'A'。
引用类型(Reference Types)
除了原始类型外,所有的其他类型都是引用类型,包括:
•类(Class):由用户定义的数据结构,可以包含字段(变量)和方法(函数)。
•接口(Interface):定义了一组抽象方法,实现该接口的类必须提供这些方法的具体实现。
•数组(Array):存储相同类型的多个元素,既可以是原始类型也可以是引用类型。
•枚举(Enum):一组命名的常量集合。
•注解(Annotation):提供了元数据信息,可以应用于包、类、方法、参数等。
包装类(Wrapper Classes)
对于每一个原始类型,Java 都提供了一个对应的包装类,允许将原始类型视为对象处理。这些包装类位于 java.lang 包中,它们包括:
•Boolean 对应 boolean
•Byte 对应 byte
•Short 对应 short
•Integer 对应 int
•Long 对应 long
•Float 对应 float
•Double 对应 double
•Character 对应 char
包装类提供了许多有用的静态方法来操作相应的原始类型,比如解析字符串为数值、格式化输出等。此外,自 Java 5 开始引入的自动装箱(Autoboxing)和拆箱(Unboxing)机制使得原始类型和其对应的包装类之间的转换更加方便。
示例代码
下面是一些关于原始类型和包装类使用的例子:
public class PrimitiveAndWrapperExample {
public static void main(String[] args) {
// 原始类型
int age = 25;
double salary = 5000.50;
char grade = 'A';
boolean isEmployed = true;
// 包装类
Integer ageObject = Integer.valueOf(age); // 或者简单地写成 new Integer(age)
Double salaryObject = salary; // 自动装箱
Character gradeObject = Character.valueOf(grade);
Boolean isEmployedObject = isEmployed;
// 输出原始类型和包装类的值
System.out.println("Age (primitive): " + age);
System.out.println("Salary (primitive): " + salary);
System.out.println("Grade (primitive): " + grade);
System.out.println("Is Employed (primitive): " + isEmployed);
System.out.println("Age (wrapper): " + ageObject);
System.out.println("Salary (wrapper): " + salaryObject);
System.out.println("Grade (wrapper): " + gradeObject);
System.out.println("Is Employed (wrapper): " + isEmployedObject);
// 使用包装类的方法
String numberAsString = "123";
int number = Integer.parseInt(numberAsString);
System.out.println("Parsed number: " + number);
}
}