基本介绍
java
数据类型分为两大类:基本数据类型和引用数据类型
基本数据类型有8种:byte【字节】、short【短整型】、int【整型】、long【长整型】、float【单精度】、double【双精度】、char【字符型】、boolean【布尔类型】
引用数据类型有类、接口和数组
类型 | 占用存储空间 | 范围 |
---|---|---|
byte | 1字节 | -128 ~ 127 |
short | 2字节 | -32768 ~ 32767 (-2^15 ~ 2^15-1) |
int | 4字节 | -2147483648 ~ 2147483647 (-2^31 ~ 2^31-1) |
long | 8字节 | -2^63 ~ 2^63-1 |
float | 4字节 | -3.403E38 ~ 3.403E38 |
double | 8字节 | -1.798E308 ~ 1.798E308 |
char | 2字节 | 默认使用Unicode编码,0 ~ 2^16-1 |
boolean | 1字节 | true、false |
java的整数常量默认是int,声明long型常量,后面要加’l’或’L’ ; 浮点型常量默认为double,声明float型常量,后面需要加’f’或’F’。
自动类型转换
在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,以精度大的类型为准。
java中,数据类型按精度(容量)大小排序:
char→int→long→float→double
byte→short→int→long→float→double
按照以上箭头方向可以进行自动类型转换,反之,不允许精度大的类型向精度小的类型转换,会发生精度损失。(理解:想象一个大盒子里可以放下小盒子,小盒子装不下大盒子,类比于自动类型转换,精度大的类型占用的空间也就大些。)
下面看一些测试:
byte n = 10; //在byte范围内就可以,-128-127
short s = 2;
short res = n + s; //报错,short,byte和char在计算时会提升至int
int i = 'a'; //输出97,字符a的Unicode编码
long a = 1; //编译通过,这个1为整型,向上自动转型
float b = 2; //同上
float c = 3.0; //编译不通过,3.0默认为double,范围大的不能向范围小的转换,会损失精度,除非进行强制类型转换
int x = 1;
double y = 1.0;
int z = (int) (x + y);
System.out.println(z); //2
System.out.println(x + y); //2.0