【本文参考自《Java程序员面试笔试宝典》】
【Java基本数据类型】Java语言一共提供了8种基本数据类型:byte、short、int、long、float、double、char、boolean。这些基本类型的数据变量在声明之后就会立刻在栈上被分配内存空间。除了这8种基本数据类型外,其他类型都是引用类型,它们以特殊的方法指向对象实体,这类变量在声明时不会被分配内存空间,知识存储了一个内存地址而已。
【8种基本数据类型的对比】
基本数据类型 | 字节长度 | 范围 | 默认值 | 包装类 |
byte | 1 | [-128,127] [-2^7,2^7-1] |
0 | Byte |
short | 2 | [-32768,32767] [-2^15,2^15-1] |
0 | Short |
int | 4 | [-2147483648,2147483647] [-2^31,2^31-1] |
0 | Integer |
long | 8 | [-9223372036854775808,9223372036854775807] [-2^63,2^63-1] |
0L或0l | Long |
float | 4 | 32位IEEE 754单精度范围 | 0.0F或0.0f | Float |
double | 8 | 64位IEEE 754双精度范围 | 0.0 | Double |
char | 2 | Unicode [0,65535] | u0000 | Character |
boolean | 1 | true和false | false | Boolean |
【注】Java中的数据类型都是有符号的,不存在无符号的数,它们的取值范围也是固定的,不会随着硬件环境或操作系统的改变而改变。在Java语言中,默认声明的小数是double类型的,因此在对float类型的变量进行初始化时需要进行类型转换。类似地,直接写的整型数字是int类型的,如果在给数据类型为long的变量直接赋值时,也需要进行类型转换。
【隐式数据类型转换】在java语言中,当参与运算的两个变量的数据类型不同时,就需要进行隐式的数据类型转换。转换的规则为:从低精度向高精度转换,即优先级满足byte<short<char<int<long<float<double。但是基本数据类型与boolean类型是不能相互转换的。
【强制类型转换】当需要从高级数据类型转换为低级数据类型时,就需要进行强制类型转换,但是需要注意的是,在强制类型转换后,可能会损失精度。强制类型转换的规则如下:
原操作数类型 | 转换后操作数类型 |
byte | char |
char | byte,char |
short | byte,char |
int | byte,char,short |
long | byte,char,short,int |
float | byte,char,short,int,long |
double | byte,char,short,int,long,float,double |