一、JAVA 基本数据类型
数据类型 | 关键字 | 字节 | 取值范围 |
整形 | byte | 1字节 | -128 ~ 127 |
short | 2字节 | -32768 ~ 32767 | |
int | 4字节 | -2147483648 ~ 2147483647 | |
long | 8字节 | -9223372036854775808 ~ 9223372036854775807 | |
浮点数 | float | 4字节 | -3.401298e-38 ~ 3.402823e+38 |
double | 8字节 | -4.9000000e-324 ~ 1.797693e+308 | |
字符 | char | 2字节 | 0 ~ 65535 |
布尔 | boolean | 1字节 | true 、false |
二、数据类型转换
数据类型转换分为两种:隐式转换(自动类型转换)和强制转换
强制转换:取值范围大的转换为取值范围小的
隐式转换:取值范围小的转换为取值范围大的
整数和浮点数的取值范围比较(从小到大):byte->short->int->long->float->double
注意:进行强制转换时有可能造成精度丢失或溢出
隐式转换的演示
//因为int的取值范围小于float的取值范围,进行隐式转换
int a = 10;
float b = a;
System.out.println(b);//输出结果:10.0
强制转换的演示
//因为short的取值范围大于byte的取值范围,进行强制转换
short a = 1000;
byte b = (byte) a;
System.out.println(b);//输出结果:-24
扩展:数据转换的原理
数据转换是在补码的基础进行操作的
说明:原码、反码和补码是计算机中数据的二进制表示形式
用补码来解释隐式转换
//因为int的取值范围小于float的取值范围,进行隐式转换
byte a = 10;//补码表示:0000 1010
short b = a;//补码表示:0000 0000 0000 1010
//由1字节变为2字节,即在前面加上0000 0000
System.out.println(b);//输出结果:10
用补码来解释强制转换
//因为short的取值范围大于byte的取值范围,进行强制转换
short a = 1000;//补码表示:0000 0011 1110 1000
byte b = (byte) a;//补码表示:1110 1000
//由2字节变为1字节,即去掉前面的0000 0011
System.out.println(b);//输出结果:-24