Java 基本数据类型
Java - 基本数据类型
Section titled “Java - 基本数据类型”变量是编程的基础。可以把它们看作是计算机内存中有名字的容器,用来存储信息(值)。当你声明一个变量时,你就告诉 Java 这个变量的名字以及它将存储的数据类型。这会预留内存空间。
数据类型决定了分配多少内存以及可以存储哪种类型的数据(如整数、小数或字符)。Java 有两大类数据类型:
- 基本数据类型 (Primitive Data Types):数据的基本组成单元。
- 引用数据类型 (Reference Data Types):用于引用对象(类的实例)。
基本数据类型
Section titled “基本数据类型”Java 提供了八种基本数据类型。它们直接内置于语言中,并通过关键字标识。它们直接将实际值存储在变量分配的内存中。
数值类型(整型)
Section titled “数值类型(整型)”- 大小:8 位有符号二进制补码整数。
- 范围:-128 到 127。
- 默认值:0。
- 用途:当值在 byte 范围内时,在大数组中节省内存。对流/文件数据有用。
- 示例:
byte smallNumber = 100; byte negativeByte = -50;
short:
Section titled “short:”- 大小:16 位有符号二进制补码整数。
- 范围:-32,768 到 32,767。
- 默认值:0。
- 用途:像
byte一样节省内存,但范围更广。不如int常用。 - 示例:
short mediumNumber = 10000; short negativeShort = -20000;
- 大小:32 位有符号二进制补码整数。
- 范围:-2,147,483,648 到 2,147,483,647(大约 +/- 20 亿)。
- 默认值:0。
- 用途:最常用的整型。通常是表示整数的默认选择,除非内存是关键考虑因素或需要更大的范围。
- 示例:
int standardNumber = 100000; int negativeInt = -200000;
- 大小:64 位有符号二进制补码整数。
- 范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(大约 +/- 9 百亿亿)。
- 默认值:0L。
- 用途:当你需要比
int更宽的范围时使用,例如以毫秒为单位的时间戳或大型计数器。 - 注意:在数字后附加 ‘L’ 或 ‘l’ 表示它是 long 字面量。
- 示例:
long largeNumber = 100000L; long veryLargeNumber = -9000000000L;
数值类型(浮点型)
Section titled “数值类型(浮点型)”float:
Section titled “float:”- 大小:单精度 32 位 IEEE 754 浮点数。
- 默认值:0.0f。
- 用途:与
double相比,在大型浮点数数组中节省内存。由于潜在的四舍五入误差,不适合用于表示精确值,例如货币。 - 注意:在数字后附加 ‘f’ 或 ‘F’ 表示它是 float 字面量。
- 示例:
float percentage = 98.5f; float temperature = -10.2F;
double:
Section titled “double:”- 大小:双精度 64 位 IEEE 754 浮点数。
- 默认值:0.0d。
- 用途:表示小数值的默认选择。提供比
float更大的范围和更高的精度。仍然不适合精确的金融计算。 - 注意:小数的字面量默认被视为
double类型(后缀 ‘d’ 或 ‘D’ 是可选的)。 - 示例:
double price = 199.99; double piApproximation = 3.1415926535;
关于精度的重要说明:
对于需要高精度的计算,尤其是金融计算,应避免使用 float 和 double。请改用 java.math.BigDecimal 类。它提供了十进制数的精确表示。
其他基本类型
Section titled “其他基本类型”boolean:
Section titled “boolean:”- 表示一位信息。
- 可能的值:只有
true或false。 - 默认值:
false。 - 用途:用于表示真/假状态的标志或条件(例如,在
if语句、循环中)。 - 示例:
boolean isLoggedIn = true; boolean isComplete = false;
- 大小:单个 16 位 Unicode 字符。
- 范围:‘\u0000’ (0) 到 ‘\uffff’ (65,535)。
- 默认值:‘\u0000’。
- 用途:存储单个字符。也可以使用转义序列存储特殊字符。
- 注意:字符字面量用单引号括起来。
- 示例:
char grade = 'A'; char initial = 'J'; char newlineChar = '\n';
引用数据类型(对象)
Section titled “引用数据类型(对象)”与直接存储值的基本类型不同,引用变量存储的是对象(类的实例)在内存中的地址。可以把它想象成一个遥控器(引用变量),指向内存中的实际电视机(对象)。
- 使用类构造函数 (
new ClassName(...)) 创建。 - 用于访问对象的字段(状态)和方法(行为)。
- 可以赋值给声明类型的变量或兼容的超类型变量。
- 包括类对象(如
String、Scanner或自定义类如Employee、Dog)、数组、接口和枚举。 - 默认值:
null(表示变量当前不指向任何对象)。 - 示例:
String greeting = "Hello"; // String object Dog myDog = new Dog("Buddy"); // Custom Dog objectint[] numbers = new int[10]; // Array object
Java 字面量
Section titled “Java 字面量”字面量是直接在源代码中表示的固定值,无需计算。字面量可以赋值给变量。
示例:
int age = 30; // Integer literaldouble weight = 65.5; // Floating-point literalboolean active = true; // Boolean literalchar firstInitial = 'C';// Character literalString name = "Alice"; // String literal整数字面量(byte、short、int、long)可以用不同的进制表示:
- 十进制 (Base 10):标准数字(例如,
100)。 - 十六进制 (Base 16):前缀
0x或0X(例如,0x64是 100)。 - 八进制 (Base 8):前缀
0(例如,0144是 100)。使用时要小心,很容易与十进制混淆。 - 二进制 (Base 2, Java 7+):前缀
0b或0B(例如,0b1100100是 100)。
int decimalValue = 100;int hexValue = 0x64;int octalValue = 0144; // 注意前导零!int binaryValue = 0b1100100;long socialSecurity = 123_45_6789L; // 下划线 (Java 7+) 提高可读性字符串字面量是用双引号 ("") 括起来的字符序列。
"Hello, World!""Line one\nLine two" // \n 是换行转义序列"He said, \"Java is fun!\"" // \" 转义双引号String 和 char 字面量支持 Unicode 字符和转义序列:
char copyrightSymbol = '\u00A9'; // 使用 Unicode 转义表示 ©String greeting = "\u0048\u0065\u006C\u006C\u006F"; // "Hello"常用转义序列:
Section titled “常用转义序列:”| 表示法 | 表示的字符 |
|---|---|
\n | 换行 |
\r | 回车 |
\f | 换页 |
\b | 退格 |
\t | 制表符 |
\" | 双引号 |
\' | 单引号 |
\\ | 反斜杠 |
\uXXXX | Unicode 字符(十六进制 XXXX) |
局部变量类型推断 (var)
Section titled “局部变量类型推断 (var)”从 Java 10 开始,你可以使用 var 关键字声明局部变量(方法内的变量)。编译器会根据赋给它的值推断类型。这可以使代码更简洁,但请谨慎使用。
var message = "Hello from var!"; // 编译器推断类型为 Stringvar count = 10; // 编译器推断类型为 intvar list = new java.util.ArrayList<String>(); // 推断为 ArrayList<String>注意:var 不是关键字,而是保留类型名。它不能用于字段、方法参数或返回类型。对于初学者来说,显式声明类型通常更清晰。
接下来是什么?
Section titled “接下来是什么?”现在你已经了解了基本数据类型,下一章将深入探讨不同类型的变量(局部变量、实例变量、静态变量)及其作用域,解释它们在 Java 类和方法中的使用位置和方式。