Java基础复习-数据类型
说明
- Java版本: Java8
- 系统版本: Windows10
- 开发工具: intellij idea
后续文章,如无特殊声明均采用以上环境
数据类型
Java中一共有八种基本数据类型,其中有4种整型,2种浮点类型,1用字符类型char,1种表示boolean类型
整型
整型用于表示没有小数部分的数值,它允许是负数。
| 类型 | 存储要求 | 取值范围 |
|---|---|---|
int |
4字节 | -2147483648(-2^31)~2147483647(2^31-1)(整好超过20亿) |
short |
2字节 | -32768(-2^15)~32767(2^15-1) |
long |
8字节 | -9223372036854775808(-2^63)~9223372036854775807(2^63-1) |
byte |
1字节 | -128(-2^7)~127(2^7-1) |
通常情况下int类型最常用。但如果表示星球上的居住人数,就需要使用long类型。byte和short类型主要用于特定的应用场合。例如:底层文件的处理或者需要控制占用存储空间量的大数组。
- 在Java中,整型的范围与运行Java代码的机器无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中的不同操作系统之间进行移植带来的诸多问题。
长整型long数值有一个后缀L或者l小写的L(如4000000000L)。十六进制数值有一个前缀0x或者0X(如0xCAFE)。八进制有一个前缀0,例如,010对应八进制中的8。很显然,8进制表示法比较容易混淆,所以建议最好不要使用进制常数。
从Java7开始,加上前缀0b或者0B就可以写二进制数。例如,0b1001就是9。另外同样从Java7开始,还可以为数字字面量加下划线,如用1_000_000(或者0b111_0100_0010_0100_0000)表示一百万。这些下划线只是为了让人更易读。Java编译器会去除这些下滑线。
浮点类型
浮点类型用于用于表示有小数部分的数值。
| 类型 | 存储需求 | 取值范围 |
|---|---|---|
float |
4字节 | 大约±3.40282347E+38F(有效位数为6~7) |
double |
8字节 | 大约±1.79769313486231570E+308(有效位数为15位) |
double表示这种类型的数据精度是float类型的两倍(有人称之为双精度数值)。大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足需求。只有在很少的i情况下适合使用float类型,例如,需要单精度数据的库,或者需要存储大量数据。
float类型的数值有一个后缀F或f(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认未double类型。也可以在浮点数值后面添加后缀D或d(例如,3.14D)。
所有的浮点数值计算都遵循IEEE 754规范。具体来说,下命是用于表示溢出和出错情况的三个特殊的浮点数值:
- 正无穷大
- 负无穷大
- NaN(不是一个数字)
例如,一个正整数除以0的结果为正无穷大。计算0/0或者负数的平方根结果为NaN.
常量
Double.POSITIVE_INFINITY(正无穷大)、Double.NEGATIVE_INFINITY(负无穷大)和Double.NaN(不是一个数字)以及相对应的Float类型的常量,分别表示这三个特殊的值,但在实际应用中很少遇到。特别说明:不能这样检测一个特定的值是否等于
Double.NaN:
1 if (x == Double.NaN) //永远为false所有“非数值”的值都认为是不相同的。然而可用使用
Double.isNaN方法:
1 if (Double.isNaN(x)) //验证x是否不是数字
浮点数值不适用与无法接受舍入误差的金融计算中。例如,命令System.out.println(2.0-1.1);将打印出0.8999999999999999,而不是0.9。这种舍入的误差主要原因是浮点数值采用二进制系统表示,而在二进制中系统无法准确地表示分数1/10。如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal类。
char类型
char类型原本用于表示单个字符。不过, 现在情况已经有所变化 。如今, 有些Unicode字符可以用一个char值描述,另外一些Unicode字符则需要两个char值。
char类型的字面量值要用单引号括起来。例如:'A' 是编码值为65所对应的字符常量 。它与 " A " 不同,"A"是包含一个字符A的字符串 , char 类型的值可以表示为十六进制值,其范围从 \u0000到\Uffff。例如:\u2122表示注册符号(™) ,\u03C0表示希腊字母π。
除了转义序列\u之外 ,还有一些用于表示特殊字符的转义序列,请参考下表。所有这些转义序列都可以出现在加引号的字符字面量或字符串中。例如 , '\02122' 或 "Hello\n"。转义序列\u还可以出现在加引号的字符常量或字符串之外(而其他所有转义序列不可以)。例如 :
1 | public static void main (String \u005B\u005D args) |
就完全符合语法规则 , \u005B和\u005D 是 [和 ] 的编码 。
| 转义序列 | 名称 | Unicode值 |
|---|---|---|
\b |
退格 | \u0008 |
\t |
制表 | \u0009 |
\n |
换行 | \u000a |
\r |
回车 | \u000d |
" |
双引号 | \u0022 |
' |
单引号 | \u0027 |
\ |
反斜杠 | \u005c |
Unicode转义序列会在解析代码之前得到处理。例如,
"\u0022+\u0022"并不是一个有引号(U+0022)包围加号构成的字符串。实际上,\u0022会在解析之前转换为",这会得到""+"",也就是一个空串。更隐秘地,一定要注意代码注释中的
\u,注释1
// \u00A0 is a newline
会产生一个语法错误,因为读程序时
\u00A0会被替换为一个换行符。类似地,下面这个注释:1
// Loog inside c:\user
也会产生一个语法错误,因为
\u后边并未跟着4个十六进制数
boolean类型
boolean(布尔)类型有两个值:false和true,用来判定逻辑条件。整型值和布尔值之间不能进行相互转换。