1、基本类型(Primitive Types)
基本类型直接存储值,因此它们在内存中占用固定大小的空间,并且访问这些值的速度非常快,它们不是对象,因此在使用时不会引用任何对象。字符串在 Java 中是一个引用类型,而不是基本类型。它实际上是一个不可变的字符序列。
数据类型 | 类型 | 存储空间大小 | 取值范围 | 默认值 |
布尔型 | boolean | 由 JVM 实现决定。 在大多数情况下, 占用一个字节的存储空间。 | true/false | false |
字节型 | byte | 1个字节 | -128——127 | 0 |
整型 | int | 4个字节 | -2^31——2^31-1 | 0 |
短整型 | short | 2个字节 | -2^15——2^15-1 | 0 |
长整型 | long | 8个字节 | -2^63——2^63-1 | 0 |
字符型 | char | 2个字节 | \u0000 | \u0000 |
单精度浮点型 | float | 4个字节 | -2^128——2^128 | 0.0F |
双精度浮点型 | double | 8个字节 | -2^1024——2^1024 | 0.0D |
public class Main { public static void main(String[] args) { // 整数类型 byte b = 100; short s = 1000; int i = 100000; long l = 10000000000L; // 浮点类型 float f = 234.5f; double d = 123.456; // 字符类型 char ch = 'A'; // 布尔类型 boolean bool = true; // 打印变量值 System.out.println("byte value: " + b); System.out.println("short value: " + s); System.out.println("int value: " + i); System.out.println("long value: " + l); System.out.println("float value: " + f); System.out.println("double value: " + d); System.out.println("char value: " + ch); System.out.println("boolean value: " + bool); System.exit(0); //success } }
2、引用类型(Reference Types)
引用类型(Reference Types)是指基于类的实例(对象),它们不直接存储值,而是存储对内存中对象的引用(内存地址)。引用类型包括类(Class)、接口(Interface)、数组(Array)等。
public class Main { public static void main(String[] args) { Car myCar = new Car(); // 创建 Car 类的对象 myCar.color = "Red"; // 访问字段 myCar.drive(); // 调用方法 System.exit(0); //success } } // 定义一个类 class Car { String color; void drive() { System.out.println("Driving"); } }
3、引用类型和基本类型的区别
基本类型直接存储数据值,而引用类型存储对数据的引用(即内存地址)。引用类型的默认值是 null
,而基本类型的默认值取决于具体类型(例如,int
的默认值是 0
,boolean
的默认值是 false
)。对象(引用类型)存储在堆内存中,而基本类型通常存储在栈内存中。
public class Main { public static void main(String[] args) { // 基本类型示例 int a = 10; int b = a; b = 30; System.out.println("基本类型:"); System.out.println("a (int): " + a); // 输出 10 System.out.println("b (int): " + b); // 输出 30 // 引用类型示例 class MyObject { int value; } MyObject obj1 = new MyObject(); obj1.value = 10; MyObject obj2 = obj1; obj2.value = 30; System.out.println("\n引用类型:"); System.out.println("obj1.value: " + obj1.value); // 输出 30 System.out.println("obj2.value: " + obj2.value); // 输出 30 } }
4、基本类型的类型转换
基本类型的类型转换分为两种:自动类型转换(隐式转换)和强制类型转换(显式转换)。
1)自动类型转换(隐式转换)
自动类型转换是由编译器自动完成的,通常发生在将一种较小的数据类型赋值给较大的数据类型时。在 Java 中,数据类型的大小从小到大依次是:byte < short < int < long < float < double
。
public class Main { public static void main(String[] args) { // 自动类型转换示例 int i1 = 100; long l1 = i1; // 自动类型转换从 int 到 long float f1 = l1; // 自动类型转换从 long 到 float System.out.println("自动类型转换:"); System.out.println("int to long: " + l1); System.out.println("long to float: " + f1); } }
2)强制类型转换(显式转换)
强制类型转换需要明确指示编译器进行转换,通常用于将较大的数据类型转换为较小的数据类型。这可能导致数据精度的损失或溢出。
public class Main { public static void main(String[] args) { // 强制类型转换示例 double d = 100.04; long l2 = (long) d; // 强制类型转换从 double 到 long int i2 = (int) l2; // 强制类型转换从 long 到 int System.out.println("强制类型转换:"); System.out.println("double to long: " + l2); System.out.println("long to int: " + i2); } }