java 基本数据结构
Java 的基本数据类型有 8 种,包括 6 种数字类型、1 种字符类型和 1 种布尔类型。
基本数据类型总览
数字类型包括 4 种整数类型和 2 种浮点数类型,4 种整数类型是 byte、short、int 和 long,2 种浮点数类型是 float 和 double。
字符类型是 char,用于表示单个字符。Java 使用统一码对字符进行编码。
布尔类型是 boolean,包括 true 和 false 两种取值。
基本数据类型 | 存储大小 | 取值范围 | 默认值 |
byte | 8 位有符号数 | -27到27−1 | 0 |
short | 16 位有符号数 | -215到215-1 | 0 |
int | 32 位有符号数 | -231到231-1 | 0 |
long | 64 位有符号数 | -263到263-1 | 0L |
float | 32 位,符合 IEEE 754 标准 | 负数 -3.402823e+38 到 -1.401298e-45,正数 1.401298e-45 到 3.402823e+38 | 0.0f |
double | 64 位,符合 IEEE 754 标准 | 负数 -1.797693e+308 到 -4.9000000e-324,正数 4.9000000e-324 到 1.797693e+308 | 0.0d |
char | 16 位 | 0 到 216-1 | '\u0000' |
boolean | 1 位 | true 和 false | false |
数字类型直接量
直接量是在程序中直接出现的常量值。
将整数类型的直接量赋值给整数类型的变量时,只要直接量没有超出变量的取值范围,即可直接赋值,如果直接量超出了变量的取值范围,则会导致编译错误。
整数类型的直接量默认是 int 类型,如果直接量超出了 int 类型的取值范围,则必须在其后面加上字母 L 或 l,将直接量显性声明为 long 类型,否则会导致编译错误。
浮点类型的直接量默认是 double 类型,如果要将直接量表示成 float 类型,则必须在其后面加上字母 F 或 f。将 double 类型的直接量赋值给 float 类型的变量是不允许的,会导致编译错误。
基本数据类型之间的转换
有时需要把不同类型的值混合运算,因此需要对数据类型进行转换。
java数字类型转换
不同的数字类型对应不同的范围,按照范围从小到大的顺序依次是:byte、short、int、long、float、double。
将小范围类型的变量转换为大范围类型称为拓宽类型,不需要显性声明类型转换。将大范围类型的变量转换为小范围类型称为缩窄类型,必须显性声明类型转换,否则会导致编译错误。
java字符类型与数字类型之间的转换
字符类型与数字类型之间可以进行转换。
将数字类型转换成字符类型时,只使用整数的低 16 位(浮点数类型将整数部分转换成字符类型)。
将字符类型转换成数字类型时,字符的统一码转换成指定的数值类型。如果字符的统一码超出了转换成的数值类型的取值范围,则必须显性声明类型转换。
java布尔类型不能与其他基本数据类型进行转换
布尔类型不能转换成其他基本数据类型,其他基本数据类型也不能转换成布尔类型。
习题
多选题
以下写法中,会导致编译错误的是?
A byte b = 30;
B byte b = 500;
C long l = 2343223;
D float f = 3.14;
答案 正确,正确答案是 B D
解析
B 选项中,500 超出了 byte 类型的取值范围,因此会导致编译错误。
D 选项中,3.14 是 double 型直接量,不能赋值给 float 类型的变量。单选题
以下写法中,会导致编译错误的是?
A byte b = 'b';
B byte b = (byte)'b';
C short s = '\u8000';
D short s = (short)'\u8000';
正确答案是 C
解析
将字符类型转换成数字类型时,字符的统一码转换成指定的数值类型,此时需要判断字符的统一码是否超出转换成的数值类型的取值范围。
C 选项的字符直接量超出了 short 的取值范围且没有显性声明类型转换,因此会导致编译错误。
3. 哪一种基本数据类型不能和其他基本数据类型进行类型转换?
布尔类型 boolean 不能转换成其他基本数据类型,其他基本数据类型也不能转换成布尔类型 boolean。