Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共有8种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的boolean类型。
整型
整型用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型,具体内容如下表所示。
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节 | -2 147 483 648 ~ 2 147 483 648(正好超过20亿) |
short | 2字节 | -32 768 ~ 32 768 |
long | 8字节 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
byte | 1字节 | -128 ~ 127 |
由于Java程序必须保证在所有机器上都能够得到相同的运行结果,所以各种数据类型的取值范围必须固定。
长整型数值有一个后缀L或l(如4000000000L)。十六进制数值有一个前缀0x或0X(如0xCAFE)。八进制有i一个前缀0,例如010对应八进制中的8。
从Java7开始,加上前缀0b或0B就可以直接写二进制数。例如0b1001就是9.另外,同样是从Java7开始,还可以为数字字面量加下划线,如用1_000_000(或0b1111_0100_0010_0100_0000)表示一百万。这些下划线只是为了让人更易读。Java编译器会去除这些下划线。
package PrimitiveType;
public class PrimitiveType {
public static void main(String[] args) {
int num1 = 0b1001;
int num2 = 1_000_000;
int num3 = 0b1111_0100_0010_0100_0000;
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
}
}
运行程序输出:
9
1000000
1000000
浮点类型
浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型,具体内容如下表所示。
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约 ± 3.402 823 47E + 38F(有效位数为6~7位) |
double | 8字节 | 大约 ± 1.797 693 134 862 315 70E + 308(有效位数为15位) |
float类型的数值有一个后缀F或f(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D或d(例如3.14D)。
具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:
- 正无穷大 Double.POSITIVE_INFINITY
- 负无穷大 Double.NEGATIVE_INFINITY
- 不是一个数字 Double.NaN
特别需要说明的是,不能使用 == 来检测一个特定值是否等于Double.NaN,应使用Double.isNAN方法。
package PrimitiveType;
public class PrimitiveType {
public static void main(String[] args) {
boolean bool1 = 1.0 / 0 == Double.POSITIVE_INFINITY;
boolean bool2 = -1.0 / 0 == Double.NEGATIVE_INFINITY;
boolean bool3 = Double.isNaN(0.0 / 0);
System.out.println(bool1);
System.out.println(bool2);
System.out.println(bool3);
}
}
运行程序输出:
true
true
true
char类型
char类型原本用于表示单个字符。不过,现在的情况已经有所变化。如今,有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值。
char类型的字面量值要用单引号括起来。例如:'A' 是编码值为65所对应的字符常量。它与 "A" 不同,"A" 是包含一个字符A的字符串。char类型的值可以表示为十六进制值,范围从 \u0000 到 \Uffff 。例如:\u2122 表示注册符号(™)。常用特殊字符的转义序列如下表。
转义序列 | 名称 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\" | 双引号 | \u0022 |
\' | 单引号 | \u0027 |
\\ | 反斜杠 | \u005c |
例如,"\u0022 + \u0022" 并不是一个由引号包围加号构成的字符串("+")。实际上,\u0022 会在代码解析之前转换为 " ,这会得到( ""+"" ),也就是一个空串。
package PrimitiveType;
public class PrimitiveType {
public static void main(String[] args) {
String str = "\u0022 + \u0022";
System.out.println(str);
System.out.println("************************");
System.out.println(str.equals(""));
}
}
程序运行输出:
************************
true
boolean类型
boolean(布尔)类型有两个值:false 和 true ,用来判定逻辑条件。
在C++中,数值甚至指针可以替代boolean值。值 0 相当于布尔值 false,非 0 值相当于布尔值 true。在Java中不是这样!