Java 基本数据类型
基本数据类型
$$
\begin{aligned}
\text{基本数据类型}
\begin{cases}
\text{整数类型}
\begin{cases}
byte &1个字节 \\
short &2个字节 \\
int &4个字节 \\
long &8个字节
\end{cases} \\
\text{浮点类型}
\begin{cases}
float &4个字节 \\
double &8个字节
\end{cases} \\
\text{字符类型}
\begin{cases}
char &2个字节
\end{cases} \\
\text{布尔类型}\text{ }boolean
\end{cases}
\end{aligned}
$$
Java只包含这8种基本数据类型,值得指出的是,字符串String
不是基本数据类型,字符串是一个类,也就是个引用数据类型
。
整型
整型的数值范围
整型的数值范围为:
$$
(-2^{\text{占比特位数}-1}=-2^{\text{占比特位数}\times 8-1})\sim (2^{\text{占比特位数}-1}-1=2^{\text{占比特位数}\times 8-1}-1)
$$
例如
- 一个byte类型整数在内存里占$8$位,可以表示的数值范围为:
- $(-2^{1\times 8 -1}=-2^7=\textcolor{red}{128})\sim (2^{1\times 8 -1}-1=2^7-1=\textcolor{red}{127})$
- 一个short类型整数在内存里占$16$位,可以表示的数值范围:
- $-32768(-2^{15})\sim 32767(2^{15}-1)$
- 一个int类型整数在内存里占$32$位,可以表示的数值范围为:
- $-2147483648(-2^{31})\sim 2147483647(2^{31}-1)$
- 一个long类型整数在内存里占$64$位,表数范围是:
- $(2^{63})\sim (2^{63}-1)$
直接给出的整数值默认为int类型
int是最常用的整数类型,因此在通常情况下,直接给出一个整数值默认就是int类型。除此之外,有如下两种情形必须指出:
- 如果直接将一个较小的整数值(在byte或 short类型的表数范围内)赋给一个byte或 short变量,系统会自动把这个整数值当成byte或者shot类型来处理。也就是
byte a=1
,这里的整数1会直接当成byte类型来处理,short x=3
,这里的整数3
也会直接当成short类型来处理。 - 如果使用一个巨大的整数值(超出了int类型的表数范围)时,Java
不会
自动把这个整数值当成long类型来处理。如果希望系统把一个整数值当成long类型来处理,应在这个整数值后增加l或者L
作为后缀。通常推荐使用大写的L
,因为英文小写l
很容易跟数字1
搞混。也就是long a=2147483648;
这样写,$(2^{31}-1+1=2147483648)$ 虽然在Long的表示范围之内,但是编译器还是认为它是一个int类型,2147483648
超出了int的表示范围。所以在编译时会报错,正确的写法为long a=2147483648L;
可以把一个较小的整数值(在int类型的表数范围以内)直接赋给一个long类型的变量,这并不是因为Java会把这个较小的整数值当成long类型来处理,Java依然把这个整数值当成int类型来处理,只是因为int类型的值会自动类型转换到long类型。
数值的表示方式
Java中整数值有4种表示方式:十进制、二进制、八进制和十六进制,其中二进制的整数以0b或0B开头;八进制的整数以0开头;十六进制的整数以0x或者0X开头,其中10-15分别以a-f(此处的af不区分大小写)来表示。下面的代码片段分别使用八进制和十六进制的数。