Java 是一种强类型语言。
这意味着必须为每一个变量声明一种类型。
Java 中的基本数据类型分为8种
4种为:整型。
2种为:浮点类型。
1种为:字符类型 char 用于表示:Unicode编码的代码单元。
整型
用于表示没有小数部分的数值,允许是负数。
Java 提供了 4 种 整型:
类型 | 存储需求 | 取值范围 |
---|---|---|
int | 4字节(24位) | -2 147 483 648 ~ 2 147483 647(刚刚超过20亿) |
short | 2字节(12位) | -32 768 ~ 32 767 |
long | 8字节(48位) | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
byte | 1字节(6位) | -128 ~ 127 |
不同的数据类型有不同的使用场景,应根据实际选用合适的数据类型
int 类型较为常用,但要表示整个地球的居住人口数量,就要选用更为合适的 long 类型。
而 byte 和 short 有特定的应用场合,例如:底层的文件处理 或者 存储空间很宝贵时的大数组。
Java 和 C、C++ 在数据类型上的区别
Java 中,整型的范围与运行 Java 代码的机器无关。
这就解决了软件从一个平台移植到另一个平台,或者同一个平台中的不同操作系统之间进行移植给程序员带来的诸多问题。与之相反,C和C++程序会针对不同的处理器选择最为高效的整型,这就会造成一个在 32 位处理器上运行很好的C程序在 16 位系统上运行时却发生整数溢出。
由于Java 程序必须保证在所有机器上都能够得到相同的运行结果,所以各种数据类型的取值范围必须固定。
数据类型的后缀
长整型 long
长整型有一个后缀 L 或 l
4000000000L
4000000000l
十六进制
前缀 0x 或0X
八进制
前缀有一个 0
//例如 010 对应十六进制中的 8
二进制
0b
浮点型
用于表示小数部分的数组。
Java 的浮点型有 2 种:
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4字节 | 大约± 3.402 823 47E +38F(有效位为 6 ~ 7 位) |
double | 8字节 | 大约± 1.797 693 134 862 315 70E +308(有效位为 15 位) |
double
表示这种类型的数值精度是 flato 类型的两倍(有人称其为 双精度数值)。
在很多情况下,float 类型的精度(6 ~ 7 位有效数字)并不能满足需求。实际上,只有很少数的情况下适合使用 float 类型,例如:需要单精度数的库,或者需要存储大量数据时。
float
float 类型的后缀有一个 F 或 f(例如,3.14F)。
没有后缀 F 的浮点数值 (如 3.14)总是默认为 double 类型。当然也可以在浮点数值后面添加后缀 D 或 d。
十六进制表示浮点数值
2.125 = 2 -3 可以表示成 0*1.0p -3。
在十六进制表示法中,使用 p表示指数,而不是e(e 是一个十六进制数位)。
注意:尾数采用十六进制,指数采用十进制。指数的基数是 2,而不是是 10。
字符型
char 类型表示单个字符。
char 类型值需要用 ‘单引号’ 括起来。
例如,‘A’ 是编码值为 65 的字符常量。它与 “A” 不同。“A” 是包含一个字符的A的字符串。
char 类型的值可以表示为 十六进制,其范围为 \U0000 到 \uFFFF。
例如, \u2122 表示商标符号 ™,\u03C0 表示希腊字母 π。
除了转义序列 \u之外,还有一些用于表示特殊字符的转义序列。
转义序列
转义序列 | 名称 | Unicode 值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\ ‘’ | 双引号 | \u0022 |
\ ’ | 单引号 | \u0027 |
\ \ | 反斜杠 | \u004c |
Unicode 转义序列会在解析代码之前得到处理。
布尔型
boolean 布尔类型有两个值:true、false。用于判定逻辑条件。
整型值和布尔值之间不能进行相互转换。
在 C++中,数值甚至指针可以代替 boolean值。值0相当于布尔值 false。非0值相当于布尔值 true。
在 C++ 中下述代码可编译通过,但在 Java 中则不能。
原因在于:整数表达式 x = 0 不能转换为boolean值。
if(x = 0)