1. Java的数据类型
Java的数据类型包括基本数据类型和引用数据类型。其中基本数据类型就是我们通常所说的4类8种数据类型,如下图所示,4类即整数类型、浮点数类型、字符型和布尔型,8种即byte、short、int、long、float、double、char、boolean,其中byte为1个字节(1个字节有8位,即8bit),short为2个字节,int为4个字节,long为8个字节,float为4个字节,double为8个字节,char为2个字节,boolean为1/8个字节,即1位(bit)。除了基本数据类型,还是引用数据类型,引用数据类型即数组、接口或类等。
2. Java基本数据类型的转换
如果系统支持把某个基本类型的值直接赋给另一个基本类型的变量,则这种方式被称为自动类型转换。Java中,当把一个表数范围小的数值或变量赋值给另一个表数范围大的变量时,系统就可以自动转换,就如同两瓶水,把小瓶的水倒入大瓶中时没有任何问题。
如下图所示,箭头左边的数值型可以自动转到箭头右边的数值型。
如下代码展示了Java的基本数据类型自动转换的功能(代码来自于《疯狂Java讲义》):
public class AutoConversion {
public static void main(String[] args) {
int a = 6;
//int可以自动转换为float类型
float f = a;
//下面将输出6.0
System.out.println(f);
//定义一个byte类型的整数变量
byte b = 9;
// 下面代码将出错,byte型不能自动类型转换为char型
//char c = b;
// 下面是byte型变量可以自动类型转换为double型
double d = b;
//下面将输出9.0
System.out.println(d);
}
}
此外如果希望把箭头右边的类型转换成左边的类型,则必须使用强制转换语法:(type)value,例如int a = (int)1.0。下面代码展示了Java的基本数据类型强制转换的功能(代码来自于《疯狂Java讲义》):
public class NarrowConversion {
public static void main(String[] args) {
int iValue = 233;
//强制把一个int类型的值转换为byte类型的值
byte bValue = (byte)iValue;
//将输出-23
System.out.println(bValue);
double dValue = 3.98;
//强制把一个double类型的值转换为int
int toI = (int)dValue;
// 将输出3
System.out.println(toI);
}
}
除此之外,还有几点重要说明:
-
boolean类型不可以转换成其他类型,其他类型也不可以转换成boolean类型。
-
byte、short、char之间不会相互转换,三者在计算时首先转换成int类型后再运算。
-
容量大的数据类型转换成容量小的数据类型时,需要加强制转换符,但是可能造成精度降低或移除。
-
有多重类型的数据在作混合运算时,系统首先自动将所有的数据类型转换成最大的数据类型,然后再计算。
上述几点的说明见如下代码:
public class TestConvert {
public static void main(String[] args) {
int a = 200, b = 300;
double d1 = (a + b) * 1.2; //系统将其转换成double计算
float f1 = (float)((a + b) * 1.2); //要加强制转换符
byte b1 = 127;
byte b2 = 10;
//系统将其转换成int类型进行计算,要加强制转换符
byte b3 = (byte) (b1 + b2);
System.out.println(b3); //输出-119
double d2 = 1e200;
float f2 = (float) d2; //float最多是10e38
System.out.println(f2); //输出Infinity
float f3 = 1.53f; //必须加f
long l1 = 123;
long l2 = 4000000000L; //必须加L
float f = l1 + l2 + f3; //系统将所有类型全部转换成float类型计算
long l = (long)f; //砍掉小数点
}
}
参考文献:
疯狂Java讲义,李刚,电子工业出版社。