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);
}
}