文档

Java™ 教程
隐藏目录
基本数据类型
指南: 学习Java语言
课程: 语言基础
章节: 变量

基本数据类型

Java编程语言是静态类型的,这意味着所有变量在使用之前必须先声明。这包括声明变量的类型和名称,就像你已经看到的:

int gear = 1;

这样做告诉你的程序,存在一个名为"gear"的字段,它保存数值数据,并且初始值为"1"。变量的数据类型决定它可以包含的值,以及可对其执行的操作。除了int,Java编程语言还支持其他七种原始数据类型。原始类型由语言预定义,并由保留关键字命名。原始值与其他原始值不共享状态。Java编程语言支持的八种原始数据类型包括:

除了上述列出的八种原始数据类型外,Java编程语言还通过java.lang.String类为字符字符串提供了特殊支持。将字符字符串放在双引号内将自动创建一个新的String对象;例如,String s = "this is a string"。String对象是不可变的,这意味着一旦创建,它们的值就不能更改。String类在技术上不是原始数据类型,但考虑到语言对它的特殊支持,你可能会倾向于将其视为原始数据类型。在“简单数据对象”中你将了解更多关于String类的内容。

默认值

在声明字段时,不一定必须给它们赋值。声明但未初始化的字段将由编译器设置为合理的默认值。一般来说,这个默认值将为零或null,具体取决于数据类型。然而,依赖这种默认值通常被认为是不良的编程风格。

下表总结了上述数据类型的默认值。

数据类型 默认值(用于字段)
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String(或任何对象)  null
boolean false

局部变量有些不同;编译器从不为未初始化的局部变量分配默认值。如果无法在声明变量的位置初始化局部变量,请确保在使用之前为其赋值。访问未初始化的局部变量将导致编译时错误。

字面值

你可能已经注意到,在初始化原始类型的变量时不使用new关键字。原始类型是内置于语言中的特殊数据类型;它们不是从类创建的对象。字面值是固定值的源代码表示形式;字面值直接在代码中表示,无需计算。如下所示,可以将字面值分配给原始类型的变量:

boolean result = true;
char capitalC = 'C';
byte b = 100;
short s = 10000;
int i = 100000;

整数字面值

如果整数字面值以字母 Ll 结尾,则它的类型为 long;否则为 int 类型。建议使用大写字母 L,因为小写字母 l 很难与数字 1 区分开。

类型为 byteshortintlong 的整数字面值可以从 int 字面值中创建。类型为 long 的值超过 int 范围时,可以从 long 字面值中创建。整数字面值可以使用以下数字系统表示:

对于通用编程来说,十进制系统可能是你唯一使用的数字系统。但是,如果需要使用其他数字系统,以下示例显示了正确的语法。前缀 0x 表示十六进制,0b 表示二进制:

// 十进制的数字 26
int decVal = 26;
// 十六进制的数字 26
int hexVal = 0x1a;
// 二进制的数字 26
int binVal = 0b11010;

浮点数字面值

如果浮点数字面值以字母 Ff 结尾,则它的类型为 float;否则为 double 类型,并且可以选择以字母 Dd 结尾。

浮点数类型(floatdouble)也可以使用 E 或 e(表示科学计数法)、F 或 f(32 位浮点字面值)和 D 或 d(64 位双精度字面值;这是默认值,并且按照约定通常省略)进行表示。

double d1 = 123.4;
// 与 d1 值相同,但使用科学计数法表示
double d2 = 1.234e2;
float f1  = 123.4f;

字符和字符串字面值

charString 类型的字面值可以包含任何 Unicode(UTF-16)字符。如果你的编辑器和文件系统允许,你可以直接在代码中使用这些字符。如果不允许,你可以使用 "Unicode 转义",例如 '\u0108'(带抑扬符的大写 C),或者 "S\u00ED Se\u00F1or"(西班牙语中的 Sí Señor)。始终使用 '单引号' 表示 char 字面值,使用 "双引号" 表示 String 字面值。Unicode 转义序列可以在程序的其他位置使用(例如在字段名中),不仅仅限于 charString 字面值中。

Java编程语言还支持一些特殊的转义序列用于charString字面量: \b (退格符), \t (制表符), \n (换行符), \f (换页符), \r (回车符), \" (双引号), \' (单引号), 和 \\ (反斜杠)。

还有一个特殊的null字面量,可以用作任何引用类型的值。除了原始类型的变量,null可以赋值给任何变量。对于null值,你几乎无法做任何操作,只能测试其是否存在。因此,在程序中通常使用null作为标记,表示某个对象不可用。

最后,还有一种特殊的字面量称为类字面量,由类型名称后面添加".class"构成;例如,String.class。这指的是代表类型本身的Class对象。

在数字字面量中使用下划线字符

在Java SE 7及更高版本中,数字字面量中可以出现任意数量的下划线字符(_)。这个特性使得你可以在数字字面量的数字之间使用下划线字符进行分组,以提高代码的可读性。

例如,如果你的代码包含有很多位数的数字,你可以使用下划线字符将数字分组成每三位一组,类似于使用标点符号如逗号或空格作为分隔符。

下面的例子展示了在数字字面量中使用下划线的其他方法:

long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi =  3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;

你只能在数字之间放置下划线,不能放置在以下位置:

以下示例演示了数字字面量中有效和无效的下划线放置位置(被标记为Invalid):

// 无效:不能将下划线放在
// 小数点旁边
float pi1 = 3_.1415F;
// 无效:不能将下划线放在 
// 小数点旁边
float pi2 = 3._1415F;
// 无效:不能将下划线放在 
// L后缀之前
long socialSecurityNumber1 = 999_99_9999_L;

// OK(十进制字面量)
int x1 = 5_2;
// 无效:不能将下划线放在
// 字面量的结尾
int x2 = 52_;
// OK(十进制字面量)
int x3 = 5_______2;

// 无效:不能将下划线放在
// 0x基数前缀
int x4 = 0_x52;
// 无效:不能将下划线放在
// 数字的开头
int x5 = 0x_52;
// OK(十六进制字面量)
int x6 = 0x5_2; 
// 无效:不能将下划线放在
// 数字的结尾
int x7 = 0x52_;

上一页: 变量
下一页: 数组