Java变量
Java变量数据类型:
1 byte(字节) = 8 bit(比特/位)
类型 | 大小(字节byte)/范围 |
---|---|
boolean 布尔型 | 1/8(0,1) |
byte 字节类型 | 1 (-27~27-1) |
char 字符型 | 2 |
short 短整型 | 2(-215~215-1) |
int 整数类型 | 4(-231~231-1) |
float 浮点类型(单精度) | 4 (3.402823e+38 ~ 1.401298e-45) |
long(长整形) | 8 (-263~263-1) |
double 双精度类型 | 8( 1.797693e+308~ 4.9000000e-324 ) |
e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方。
使用 long a = 0这种赋值方式的时候,JVM内部存在数据转换,a转化为int类型。
类型转换:
- 自动类型转换:从小类型到大类型,不需要强制转换符
int a = 5;
double b = a;
- 强制类型转换:从大类型到小类型,需要强制转换符实现
double a = 3.1415
int b = (int)a;//强制转换符:(需要转换成的类型)变量
- 关于byte、short、char赋值与运算的强转规则:
(1)不参与运算时,证书直接量可以直接赋值给byte,short,char,不需要强转。
(2)byte,short,char型变量参与运算时,需要强转
byte a = 9;
byte b = 45;
byte c = (byte)(a+b);
System.out.println(c);//a、b不参与运算时,整数(a、b)可以直接赋值给byte类型变量(a、b),a、b参与运算时(a+b)需强制转换成byte,再赋值给c
Java 运算时,当两个不同类型的数进行基本运算符操作时,低精度会自动向高精度转换,字节短的会自动向字节长的转换。
《Java 核心技术》一书中这么归纳到:
如果两个操作数其中有一个是 double 类型,另一个操作就会转换为 double 类型。 否则,如果其中一个操作数是 float
类型,另一个将会转换为 float 类型。 否则,如果其中一个操作数是 long 类型,另一个会转换为 long 类型。
否则,两个操作数都转换为 int 类型。
不会丢失精度的合法的类型转化图:
值域大的向值域小的转换需要使用强制转型,可能会丢失精度。
图中实现箭头类型转换代表不会丢失精度,虚线箭头类型转换可能会丢失精度。
各进制转换bit(位)、bytes(字节)、M、G、TB、PB:
1 Byte = 8 Bit
1 KB = 1024 Bytes
1 MB = 1024 KB
1 GB = 1024 MB
1 TB = 1024 GB
1 PB = 1024 TB