Java基本数据类型
摘要:
每个数据类型都有它的取值范围。编译器会根据每个变量或常量的数据类型为其分配内存空间。Java为数值、字符值和布尔值数据提供了八种基本数据类型。
一、整数类型
整型于表示没有小数部分的数值,它可以是负数。
类型 | 存储需求 | 取值范围 | 数值 |
---|---|---|---|
byte | 1字节 | − 2 7 -2^7 −27 ~ 2 7 − 1 2^7-1 27−1 (-128 ~ 127) | 8 位带符号数 |
short | 2字节 | − 2 15 -2^{15} −215 ~ − 2 15 − 1 -2^{15}-1 −215−1 (-32 768 ~ 32 767) | 16 位带符号数 |
int | 4字节 | − 2 31 -2^{31} −231 ~ − 2 31 − 1 -2^{31}-1 −231−1 ((-2 147 483 648 ~ 2 147 483 647) | 32 位带符号败 |
long | 8字节 | − 2 63 -2^{63} −263 ~ − 2 63 − 1 -2^{63}-1 −263−1 (即 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 8077) | 64 位带符号数 |
1.数值前缀和后缀
- 十六进制数值有
0x
或0X
前缀 - 八进制数值有前缀
0
- 二进制数值有前缀
0b
或0B
- 可以为数值增加下划线:如
1_000_000
,0b1111_0100_1111
- 长整型数值有后缀
L
或l
2.Java&C++提示
1.Java中, 整型的范围与运行 Java 代码的机器无关。
2. Java 没有任何元符号 unsigned 形式 int long short byte 类型
二、浮点类型
浮点类型用于表示有小数部分的数值
类型 | 存储需求 | 取值范围 | 数值 | 有效数位 |
---|---|---|---|---|
float | 4字节 | 负数范围: − 3.4028235 × 1 0 + 38 -3.4028235\times10^{+38} −3.4028235×10+38~ − 1.4 × 1 0 − 45 -1.4\times10^{-45} −1.4×10−45 正数范围: 1.4 × 1 0 − 45 1.4\times10^{-45} 1.4×10−45 ~ 3.4028235 × 1 0 + 38 3.4028235\times10^{+38} 3.4028235×10+38 | 32 位,标准 IEEE 754 | (有效位数为6 - 7位) |
double | 8字节 | 负数范围: − 1.7976931348623157 × 1 0 + 308 -1.7976931348623157\times10^{+308} −1.7976931348623157×10+308~ − 4.9 × 1 0 − 324 -4.9\times10^{-324} −4.9×10−324 正数范围: 4.9 × 1 0 − 324 4.9\times10^{-324} 4.9×10−324 ~ 1.7976931348623157 × 1 0 + 308 1.7976931348623157\times10^{+308} 1.7976931348623157×10+308 | 64 位,标准 IEEE 754 | (有效位数为 15 位) |
浮点数值不适用于无法接受舍入误差的计算中,如果在数值计算中不允许有任何舍入误差,应该使用 BigDecimal 类
1.double&float
- double 型是 float 型的两倍。所以,double 型又称为双精度 (double precision), 而 float 称为单精度 ( single precision)。
- 在很多情况下, float 类型 的精度很难满足需求,通常情况下,应该使用 double 型。
2.浮点数值的后缀
- float 类型的数值有
F
或f
后缀 - double 类型的可以有
D
或d
后缀 - 没有后缀的浮点数值默认为 double 类型
3.浮点数的表示
科学计数法表示:
1.23456 × 1 0 2 1.23456 \times 10^2 1.23456×102 可以写成 1.23456E2 或者 l.23456E+2
- 浮点型直接量可以用 a × 1 0 b a\times10^b a×10b 形式的科学记数法表示
- E (或 e) 表示指数,既可以是大写的也可以是小写的
十六进制数表示:
0.125 × 2 − 3 \times2^{-3} ×2−3 可以表示成 0x1.0p-3
- 在十六进制表示法中,使用
p
表示指数 - 尾数采用十六进制,指数采用十进制
- 指数的基数是 2, 而不10
3.三个特殊的浮点数值
-
正无穷大
Double.POSITIV E_INFINITY
、Float.POSITIVE_INFINITY
-
负无穷大
Double.NEGATIV_INFINlTY
、Float.NEGATIV_INFINlTY
-
NaN(不是一个数字)
Double.NaN
、Float.NaN
注:不能这样桧测一个特定值是否等于 Double.NaN,可以使用 Double.isNaN 方法
if (x == Double.NaN) // is never true
if (Double.isNaN(x)) // check whe ther x is "not a number"
三、字符类型
字符数据类型表示单个字符,一些Unicode字符需要两个char值
1.字符的表示
-
字符型直接量用单引号括住
char letter = 'A';
字符串直接量必须括在双引号中。而字符直接量是括在单引号中的单个字符。
2.Unicode 和 ASCII 码
编码(encoding):将字符映射到它的二进制形式的过程。 编码表(encoding scheme)
scheme):字符有多种不同的编码方式,编码表定义该如何编码每个字符。
-
ASCII 码(美国标准信息交换码)是表示所有大小写字母、数字、标点符号和控制字符的 8 位编码表
-
16 位 Unicode 码 占 两 个 字 节,用 以 \u 开头的 4 位 十六进制数表示,范围从 ‘\u0000’ 到 ’\UFFFF’。(Unicode 码包括ASCII码)
一个 16 位的编码所能产生的字符只有 65 536 个,它是不足以表示全世界所有字符的。因此,Unicode 标准被扩展为 1 112 064 个字符。这些字符都远远超过了原来 16 位的限制,它们称为补充字符(supplementary character)
3.转义字符
转义序列 | 名称 | Unicode码 | 十进制数值 |
---|---|---|---|
\b | 退格键 | \u0008 | 8 |
\t | Tab 键 | \u0009 | 9 |
\n | 换行符 | \u000A | 10 |
\f | 换页符 | \u000C | 12 |
\r | 回车符 | \u000D | 13 |
\\ |
反斜杠 | \u005C | 92 |
\" |
双引号 | \u0022 | 34 |
4.字符型数据与数值型数据之间的转换
- char 型数据可以转换成任意一种数值类型,反之亦然。将整数转换成 char 型数据时,只用到该数据的低十六位,其余部分都被忽略
- 要将一个浮点值转换成 char 型时,首先将浮点值转换成 int 型,然后将这个整型值转换为 char 型
- 如果转换结果适用于目标变量(范围不大于),就可以使用隐式转换方式;否则,必须使用显式转换方式
- 0~FFFF 的任何一个十六进制正整数都可以隐式地转换成字符型数据。而不在此范围内的任何其他数值都必须显式地转换为 char 型
- 所有数值操作符都可以用在 char 型操作数上。如果另一个操作数是一个数字或字符,那么 char 型操作数就会被自动转换成一个数字
Unicode 转义序列会在解析代码之前得到处理:
“\u0022+\ u0022” 并不是个由引号 (\U 0022) 包围加号构成 的字符串,实际 上, \u0022 会在解析之前转换为"
,这会得到“+“
,要当心注释中的\u
:
// \u000A is a newline
语法错误 因为读程序时\u000A
会替换为一个换行符
5.字符的比较和测试
- 两个字符可以使用关系操作符进行比较,如同比较两个数字一样。这是通过比较两个字符的 Unicode 值实现的。
- 程序中需要测试一个字符是数字、字母;大写字母,还是小写字母,为了方便,Java 的 Character 类提供了下列方法用于进行字符测试:
方法 描述 isDigit(ch) 如果指定的字符是一个数字,返冋 true isLetter(ch) 如果指定的字符是一个字母,返冋 true isLetterOrDigit(ch) 如果指定的字符是一个字母或者数字,返回 true isLowerCase(ch) 如果指定的字符是一个小写字母,返冋 true isUpperCase(ch) 如果指定的字符是一个大写字母,返冋 true toLowerCase(ch) 返回指定的字符的小写形式 toUpperCase(ch) 返回指定的宇符的大写形式
四、布尔类型
boolean 数据类型声明一个具有值 true 或者 false 的变量
- 布尔类型用来判定逻辑条件,整型值和布尔值之间不能进行相互转换
在C++中,数值甚至指针可以代替 boolean,值0相当于false,Java中不行
转载:https://blog.csdn.net/BlacKingZ/article/details/115407760