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不区分大小写)来表示。下面的代码片段分别使用八进制和十六进制的数。

自动类型转换