Java 是一种强类型语言,这意味着在编写代码时必须明确声明变量的数据类型。Java 有八种基本数据类型(也称为原始数据类型),分为四类:整数类型、浮点类型、字符类型和布尔类型。
除了八种基本数据类型,Java 还有引用数据类型
基本数据类型
数据类型 | 描述 | 默认值 | 位数 | 范围 |
---|---|---|---|---|
byte | 字节类型 | 0 | 8 | -128 到 127 |
short | 短整型 | 0 | 16 | -32,768 到 32,767 |
int | 整型 | 0 | 32 | -2^31 到 2^31-1 |
long | 长整型 | 0L | 64 | -2^63 到 2^63-1 |
float | 单精度浮点型 | 0.0f | 32 | 约为 1.4E-45 到 3.4E+38 |
double | 双精度浮点型 | 0.0d | 64 | 约为 4.9E-324 到 1.8E+308 |
char | 字符类型 | '\u0000' | 16 | 0 到 65,535(基本的UTF-16编码单元) |
boolean | 布尔类型 | false | 1(理论上) | true 或 false |
扩展:less is more
整数表示
- 十进制:默认的表示方式,如
int num = 10;
- 二进制:以
0b
或0B
开头,如int num = 0b1010;
表示十进制的 10。- 八进制:以
0
开头,如int num = 012;
表示十进制的 10。- 十六进制:以
0x
或0X
开头,如int num = 0xA;
表示十进制的 10。int decimal = 10; // 十进制 int binary = 0b1010; // 二进制,表示十进制的 10 int octal = 012; // 八进制,表示十进制的 10 int hexadecimal = 0xA; // 十六进制,表示十进制的 10 System.out.println("Decimal: " + decimal); System.out.println("Binary: " + binary); System.out.println("Octal: " + octal); System.out.println("Hexadecimal: " + hexadecimal);
创建字符
- 直接赋值:可以直接将字符放在单引号内赋值给
char
类型变量,如char ch = 'A';
。- 转义字符:除了常规字符外,还可以使用转义字符表示特殊字符,如
'\n'
表示换行符、'\t'
表示制表符等。Unicode字符集
- 支持Unicode字符:Java中的
char
类型支持Unicode字符集,因此可以表示各种语言的字符、符号和图形。字符运算
- 基本运算:
char
类型可以进行基本的算术运算,如加减乘除,但一般用途较少,通常用于字符编码相关的操作。- 位运算:与其他整数类型一样,
char
类型也支持位运算操作,如位与、位或、位异或等。注意
在Java中,基本数据类型具有不可变性,这意味着一旦创建后,它们的值不能被修改。
引用类型
数据类型 | 描述 | 默认值 |
---|---|---|
String | 字符串类型 | null |
数组 | 可以存储同类型的数据 | null |
类 | 类的实例 | null |
接口 | 实现接口的类实例 | null |
String 注意事项
- 字符串池:Java 中的字符串常量池是一块特殊的内存区域,可以提高字符串对象的重用率。相同的字符串常量只会在内存中存储一份。
- 字符串操作效率:由于字符串不可变性,频繁的字符串拼接操作会产生大量的临时对象,影响性能。
特殊类型
数据类型 | 描述 |
---|---|
void | 表示无返回值的方法 |
枚举类型
数据类型 | 描述 |
---|---|
enum | 枚举类型,用于定义一组常量 |
/** 示例代码
*/
public class DataTypes {
public static void main(String[] args) {
byte byteVar = 100;
short shortVar = 10000;
int intVar = 100000;
long longVar = 100000L;
float floatVar = 234.5f;
double doubleVar = 123.4;
char charVar = 'A';
boolean booleanVar = true;
System.out.println("byte : " + byteVar);
System.out.println("short : " + shortVar);
System.out.println("int : " + intVar);
System.out.println("long : " + longVar);
System.out.println("float : " + floatVar);
System.out.println("double : " + doubleVar);
System.out.println("char : " + charVar);
System.out.println("boolean : " + booleanVar);
}
}
数值类
这些类主要用于更复杂的数值操作和表示,比基本数据类型提供了更多的功能。
类名 | 描述 |
---|---|
BigInteger | 用于表示任意精度的整数 |
BigDecimal | 用于表示任意精度的浮点数 |
示例代码
以下是使用一些这些类的示例代码:
// 使用基本数据类型的包装类
Integer intObject = Integer.valueOf(42);
Double doubleObject = Double.valueOf(3.14);
// 使用 BigInteger 表示大整数
BigInteger bigInt = new BigInteger("12345678901234567890");
// 使用 BigDecimal 表示高精度浮点数
BigDecimal bigDec = new BigDecimal("12345.67890");
// 进行数值运算
BigInteger sum = bigInt.add(new BigInteger("10"));
BigDecimal product = bigDec.multiply(new BigDecimal("2.5"));
System.out.println("Integer value: " + intObject);
System.out.println("Double value: " + doubleObject);
System.out.println("BigInteger sum: " + sum);
System.out.println("BigDecimal product: " + product);
类型转换
隐式类型转换(自动类型转换)
转化从低级到高级:byte,short,char(三者同级)—> int —> long—> float —> double
隐式类型转换是指数据类型之间的转换,由编译器自动完成,无需程序员手动干预。隐式类型转换遵循以下规则:
- 小类型转换为大类型:在数据类型范围小的类型转换为大的数据类型时,会自动完成转换,例如将
int
转换为long
。- 整数转浮点数:整数类型可以自动转换为浮点数类型,例如将
int
转换为double
。- 字面量常量转换:字面量常量(如整数常量、浮点数常量)的类型可以自动转换,例如
int
类型的整数常量可以赋值给long
类型。显式类型转换(强制类型转换)
显式类型转换是由程序员手动进行的类型转换,也称为强制类型转换。在需要将大范围类型转换为小范围类型时,需要使用强制类型转换。