众所周知,Java中有8种基本数据类型。那么这8种基本数据类型分别是什么呢?它们之间又存在着什么样的转换关系呢?
一、Java中的基本数据类型
Java中共有8种基本数据类型,又分为数值型、字符型、布尔型三大类。
基本数据类型 | 大小 | 需要注意的地方 | ||
---|---|---|---|---|
数值型 | 整数类型 | byte | 1字节 = 8 bit | 范围:-128 ~ 127 |
short | 2字节 |
| ||
int | 4字节 | 通常定义整型变量使用 int 型;整型常量默认为 int 型 | ||
long | 8字节 | 声明 long 型变量,须以 “ L ” 或 “ l ” 结尾,否则为 int 型 | ||
浮点类型 | float | 4字节 | 声明 float 型变量,须以 “ F ” 或 “ f ” 结尾,否则为 double 型;float 型表示数值的范围比 long 还大 | |
double | 8字节 | 通常定义浮点型变量使用 double 型;浮点型常量默认为 double 型 | ||
字符型 | char | 1字符 = 2字节 | 通常定义 char 型变量使用一对 ' ' ,内部只能写一个字符 | |
布尔型 | boolean | ture / false | 通常在条件判断、循环结构中使用,只能取两个值之一 |
二、基本数据类型之间的转换
Java中基本数据类型之间的转换分为两类:自动类型提升和强制类型转换。由于布尔型的特殊性,这里讨论只是其它7种基本数据类型变量间的运算,不包含boolean类型的。
(一)自动类型提升
自动类型提升的规则与基本数据类型的容量大小有关,当容量小的数据类型与容量大的数据类型的变量做运算时,运算结果就自动提升为容量大的数据类型。此时的容量大小指的是,表示数值的范围的大和小。例如 float 容量要大于 long 的容量。
例:short + int → int,int + long → long,long + float → float,float + double → double
而其中特殊的是:当byte , char , short三种类型的变量做运算时,结果为int型。
例:byte + byte → int,byte + char → int
因此可以总结出自动类型提升从小到大的规律:byte,char,short → int → long → float → double
(二)强制类型转换
强制类型转换是自动类型提升运算的逆运算。强制类型转换的实现需要使用强转符:()
例:
long l1 = 123; //注意:这里l1为int型,当其超出int的数值范围时报错。正确书写形式应为123L。
short s2 = (short)l1;
System.out.println(s2); //输出为123
需要注意的是,只有当定义的变量数值处于容量小的数据类型的容量中时,才可以将变量从容量大的数据类型强转为容量小的数据类型。而当有浮点型参与强制类型转换时,则容易引起精度损失。
例:
double d1 = 12.9;
int i1 = (int)d1; //截断操作,结果只保留小数点前的数字,而非四舍五入。
System.out.println(i1); //输出为12