2.1.1、原始数据类型

原始数据类型

Java编程语言是一门静态类型语言,这意味着你在使用变量之前必须先声明它。包括声明变量的类型和名称,如下所示:

int gear = 1;

这样我们告诉程序声明了一个名为"gear"的字段,它装载数值,初始化为1。数据类型决定了变量可以装载的值,以及它可以执行的操作。除了int,Java编程语言还支持其他7种原始类型。原始类型是语言预定义的,并且其命名作为保留字。原始值不与其他原始值共享状态。Java编程语言支持的8大原始类型如下:

  • byte

8位有符号的整数。它的取值范围是(-128,127]。

  • short

16位有符号的整数,它的取值范围是(-32768,32767]

  • int

32位有符号的整数,它的取值范围是(-2的31次方,2的31次方-1]。

  • long

64位有符号的整数,它的取值范围是(-2的63次方,2的63次方-1]。

  • float

32位单精度浮点数,它的取值范围可以参考Floating-Point Types, Formats, and Values。该类型不应该用在精确的数值上,比如货币,如果有这样的需求,你可以使用java.math.BigDecimal

  • double

64位双精度浮点数,对含小数的数值,该数据类型一般是默认类型。和float一样,它不应该用在精确的树枝上。

  • boolean

boolean类型只有两种可能的值,true和false。为跟踪真/假条件的简单标志而使用的数据类型。该数据类型描述了一个比特的信息,但关于它的大小一般没有精确的定义。

  • char

16位的Unicode字符。它的最小值为’\u0000’(或0),最大值为’\uffff’(或包括65,535)。

除了上面列出的8大数据类型。Java编程语言通过java.lang.String提供了对字符数组的特殊支持。通过双引号括起来的字符串将自动创建一个新的String对象。比如
String s = “this is a string”;字符串对象是不可变的,这意味着一经创建,它的值就不再改变。String类在技术上不是Java语言提供的原始类型,但考虑到语言对它的特殊支持,你也可以把它当做Java提供的原始类型。更多关于String的信息请参考Simple Data Objects

默认值

声明一个字段后并不总是要赋值。未初始化的字段编译器会赋予一个默认值。一般来讲,这个值可能是0或者null,取决于它的数据类型。依赖这些默认值,通常来讲是比较糟糕的编程习惯。

下面的表格总结了以上数据类型的默认值:

数据类型默认值(字段)
byte0
short0
int0
long0L
float0.0f
double0.0d
char‘\u0000’
String‘’
booleanfalse

对于本地变量,编译器不会为一个没有初始化的本地变量赋默认值。

字面量

你可能已经注意到在初始化原始类型时没有使用new 关键字。原始类型是语言自建的特殊类型。它不是通过类来创建的对象。字面量是固定值的源码表示,字面量直接在代码中表示,不需要计算。如下所示,你可以通过分配一个字面量给原始数据类型:
boolean result = true;
char capitalC = ‘C’;
byte b = 100;
short s = 10000;
int i = 100000;

数值字面量

以L或者l结尾的数值字面量表示long类型,否则其类型是int。推荐你使用大写的L因为小些的l和数字1很难区分开。

整数类型byte、short、int和long都可以通过int字面量来创建。超出了int类型范围的数值可以通过long字面量来创建。数值字面量可以通过以下数值系统来表示:

  • 十进制:由数字0~9组成,这也是你每天使用的数值系统
  • 十六进制:由数字0~9和字母 A-F组成
  • 二进制:由数字0~1组成

一般来讲,十进制的数值系统是你最常使用的。但是,如果你需要使用其他进制的数值系统,以下示例展示了正确的语法,前缀 0x 指明十六进制 ,0b指明二进制。

int decVal = 26;
int hexVal = 0x1a;
int binVal = 0b11010;

浮点字面量

以F或者f结尾的字面量表示float类型,否则它的类型是double,可选以D或者d结尾。
浮点数也可以使用科学计数法E来表示。

double d1 = 123.4;
double d2 = 1.234e2;
float f1 = 123.4f;

字符和字符串字面量

char和String类型的字面量可以包含任何Unicode字符。如果你的编辑器和文件系统支持的话,你可以直接在代码中使用这些Unicode字符。如果不行的话,可以使用Unicode转义符比如’\u0108’来表示大写的字母C。单引号的字面量表示char类型,双引号的字面量表示String类型。Unicode转义字符也可以用在程序的其他的地方,不仅仅是char或者String的字面量中。

Java编程语言也支持一些特殊的转义序列,比如:\b(back)、\t(tab)、\n(换行)、\f(换页)、\r(回车)、"(双引号)、’(单引号)、\(反斜线)。

null 字面量可以赋值给任意引用类型。它也可以赋值给任何变量,原始类型变量除外。除了测试它的存在性之外,null值几乎毫无用处。因此,null经常被程序用来表名一个对象不存在了。

最后,还有一种特殊的字面量叫做类字面量,它的格式是一个类型的名字再加上.class。比如:String.class 描述了String类自身。

在数字类型中使用下划线

在Java7和更高的版本中,任意数量的下划线都可以出现在数字字面量的任意两个数字之间。这个特性大大提高了数值的可读性。

当你的代码中包含位数很多的数值时,你可以使用下划线来将数值分隔为三位一组,类似于使用逗号或者空格等标点符号作为分隔符。

以下示例展示了在数值中使用下划线的其他方式:

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

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

  • 数字的开始或者结尾
  • 与浮点数中的小数点相邻
  • F或者L后缀之前
  • 在需要一串数字的位置

以下示例展示了数字中合法和非法的下划线位置:
// Invalid: cannot put underscores
// adjacent to a decimal point

float pi1 = 3_.1415F;

// Invalid: cannot put underscores
// adjacent to a decimal point

float pi2 = 3._1415F;

// Invalid: cannot put underscores
// prior to an L suffix

long socialSecurityNumber = 999_99_9999_L;

int x1 = 5_2;

// Invalid: cannot put underscores
// At the end of a literal

int x2 = 52_;

int x3 = 5____2;

// Invalid: cannot put underscores
// in the 0x radix prefix

int x4 = 0_x52;

// Invalid: cannot put underscores
// at the beginning of a number

int x5 = 0x_52;

int x6 = 0x5_2;

// Invalid: cannot put underscores
// at the end of a number

int x7 = 0x52_;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值