Java语言支持两种数据类型:基本数据类型(Primitive Data Types)和引用类型(Reference Types)。基本数据类型包括整数类型(Integral Types)、浮点数类型(Floating-Point Types)和布尔类型(Boolean Type)。其中,整数类型和浮点数类型合称为数值类型(Numeric Types)。引用类型是指向接口对象或者类对象的数据类型。
Java语言支持的基本数据类型如下所示。
类型 | 描述 | 取值范围 |
---|---|---|
byte | 单字节有符号整数(8-bit signed integer) | [-128, 127] |
char | 双字节无符号整数,以表示UTF-16编码的字符 (16-bit unsigned integer representing UTF-16 code units) | ['\u0000', '\uffff'] |
short | 双字节有符号整数(16-bit signed integer) | [-32768, 32767] |
int | 四字节有符号整数(32-bit signed integer) | [-2147483648, 2147483647] |
long | 八字节有符号整数(64-bit signed integer) | [-9223372036854775808, 9223372036854775807] |
float | 四字节单精度浮点数(32-bit IEEE 754 floating-point number) | |
double | 八字节双精度浮点数(64-bit IEEE 754 floating-point number) | |
boolean | 布尔值 | true 或者 false |
我们将会在介绍类和对象的时候再介绍引用类型。
标识符是由字符和数字组成的"名字"。在Java程序中,标识符用来表示变量、对象、类、接口、方法等元素或者对象。一个合法的标识符必须由字符开头,并紧接着一个或者多个字符或者数字。在这里,字符包括大写A-Z、小写a-z的英文字符,美元符号$以及下划线字符_。数字包括0-9的数字字符。
Java语言允许任意长度的标识符,但是标识符的第一个字符必须是上述的字符。标识符不能与Java关键字相同,也不能是布尔字面常量(true或者false)或者空字符常量(null)。
我们在下面例举了一些合法的Java标识符。
i j3 _internal MAX_VALUE isLetterOrDigit
在Java程序中,变量是存放数据的地方。它与数学领域中使用的变量x和y非常相似。但是,Java程序为每个变量都设置了类型,即一种类型的变量只能存放相同类型的数值。例如,一个int类型的变量只能存放一个四字节有符号整数。
在下面的例子中,我们定义了两个变量x和y。x是一个int类型的变量,值为1。y是一个单精度浮点型的变量,值为2.0。
int x = 1;
float j = 2.0f;
使用变量完成简单的计算是非常方便的。假如我们需要计算x2+2x+1的值。那么,在数学上,我们常用的办法是建立一个数学公式y=x2+2x+1。当x=1时,我们能很快的计算出y的值是4。类似的,我们也可以使用这种方法,让程序帮我们计算y的值。在下面的两行代码中,我们首先将变量x的值设置为1。然后,再通过简单的计算,将结果赋值给变量y。这样,变量y就保存了计算所得的结果。在下一章中,我们将会介绍操作府+和*的用法。在Java语言中,加法使用+符号表示,乘法使用*符号表示。
int x = 1;
int y = x * x + 2 * x + 1;
在变量定义的同时,为变量设置一个初始值的过程被称为变量初始化。在变量初始化之后,我们还能修改变量的值。这个修改变量的值的过程被称为变量赋值。所以,当我们需要再次计算x=2时的值时,我们可以做如下处理。
int x = 1;
int y = x * x + 2 * x + 1;
// 当x=2时,我们可以将新值赋值给变量x和y
x = 2;
y = x * x + 2 * x + 1;
基本类型变量的使用方法非常相似。但是,有以下几点不同之处。其一,布尔类型boolean只有两个值,true或者false。其二,下面程序中使用了字面常量(Literal),例如true, 1, 1.0F等。在默认情况下,整形字面常量的默认类型是int。如果需要使用long类型的字面常量的话,需要在常量最后添加字符"l"或者"L",例如:1L。类似的,浮点类型的字面常量的默认类型是double。如果需要初始化单精度浮点数类型的话,需要在字面常量最后添加字符"f"或者"F"。
boolean b = true; // 布尔值只有两个值true和false
short s = 1;
int i = 1;
long l = 1L;
float = 1.0F;
double = 1.0;
char c = 'c';
如果在变量创建时,没有设置初始值的话,Java语言会为其设置一个默认值。数值类型变量的默认值是0。布尔类型变量的默认值是false。char类型变量的默认值是'\u0000'。引用类型变量的默认值是null。
整数类型的字面常量可以使用十进制、十六进制、八进制或者二进制表示。当使用十六进制、八进制或者二进制时,需要在字面常量添加前缀"0x"、"0"、或者"0b"。当字面常量较长时,还可以使用下划线(_)分隔字面常量,提供更好的代码可读性。下划线不改变字面常量的值。下面列出了几种字面常量,它们表示的是相同的值。
int i1 = 11259375;
int i2 = 11_259_375;
int i3 = 0xABCDEF;
int i4 = 0xAB_CD_EF;
int i5 = 052746757;
int i6 = 052_746_757;
int i7 = 0b101010111100110111101111;
int i8 = 0b1010_1011_1100_1101_1110_1111;
浮点数的字面常量可是使用十进制或者十六进制表示。浮点数字面常量还支持科学计数法。如下的几种浮点数字面常量表示的是相同的值。
double d1 = 3.1415926;
double d2 = 3.141_592_6;
double d3 = 0x1.921FB4D12D849D891263p1; // 后缀p1表示乘以2的一次方,类似于科学计数法
double d4 = 0x1.92_1F_B4_D1_2D_84_9D_89_12_63p1;
double d5 = 3.1415926e1; // = 3.1415926 x 10的一次方
布尔类型的字面常量只有true和false两个值。
boolean b1 = true;
boolean b2 = false;
字符类型的字面常量是由一对单引号和一个字符组成的。当需要表示单引号字符或者一些特殊意义的字符时,需要使用转义字符(Escaped Character)。
char c1 = 'a'; // 表示单个字符a
char c2 = '\''; // 表示单个单引号字符
char c3 = '\t'; // 表示单个制表符
字符串字面常量是由一对双引号和一串字符组成的。类似的,字符串中的特殊字符需要使用转义字符表示。当字符串中没有字符时,我们称之为空字符串。
String emptyString = ""; // 这是一个空字符串
String aSentence = "This is a string.";
当我们在后续章节中介绍对象引用变量时,会常常使用空引用字面常量null。它表示该变量没有引用任何对象。
String aNullStringVariable = null;
如果当我们定义变量时,发现变量在初始化之后,不需要改变其值。那么,我们可以使用关键字final,告诉Java编译器,这是一个"常量"。在后续处理中,程序不会修改这个变量的值。如果修改了,请报告错误。常量的名称一般由大写字母和数字表示。
final double PI = 3.1415926;
var是一种受限的标识符(Restricted Identifier),它不是关键字。var可以用来声明变量;在声明变量时,开发人员无需明确指出变量的类型,Java编译器会自动的推演变量的类型。如果Java编译器无法推演变量类型的话,Java编译器会报告错误。
使用var能够帮助提升开发效率,因为开发人员无需写出冗长的类型名称。例如,下面都是合法的使用var的例子。var的一个常见的使用场景是在for循环中声明局部变量。
int[] a = {1, 2, 3};
var sum = 0;
for (var e: a) {
sum += e;
}
但是,var的使用也是有限制的。var不能用于以下任何一种场景。使用var时,
var a = 1, b = 2; // 错误
var d[] = new int[4]; // 错误,当d为数组时,应使用var d = new int[4];
var d; // 错误,Java编译器无法推演变量类型
var e = { 6 }; // 错误,目前Java语言不支持这种数组初始化
var f = (f = 7); // 错误,初始化时不能使用自身变量
本章介绍了Java语言的变量类型以及基本数据类型变量的初始化和赋值。基本数据类型变量的使用方法非常相似。在每一种数据类型中,Java语言支持字面常量和变量。在变量定义时,如果使用了关键字final的话,则该变量在初始化后,其值是不变的。不能在程序的后续处理中修改该变量的值。我们会在讲解类和对象时介绍Java的另一种数据类型:对象引用类型。
注册用户登陆后可留言