在说类型转换之前,必须先说说java语言的数据类型。Java语言有7中数据类型,每一种数据类型都在内存中分配了不同的内存空间。
具体分配空间如下:
Byte :1个字节
Char:2个字节
Short:2个字节
Int:4个字节
Long:8个字节
Float:4个字节
Double:8个字节
在JAVA中,类型转换就是各种数据类型之间的相互转化。类型转换分为两种,自动类型转换和强制类型转换。
1. 自动类型转换,也称为隐式类型转换。
自动类型转换的前提是:(1)两种类型是彼此兼容的;(2)转换的目的类型占得空间范围一定要大于转化的源类型
例如:
2. 强制转换
强制转换的格式是将一个类型强制转换成另一种类型。一般是用于将父类转换为子类时或者将长数据类型变为短数据类型时。
例如:Class Student extends Person
在main中,可以这样进行强制转换:
Person p=new Person();
stu=(Student)p
又例如:
在上面的例子中,如果将b=(byte)(b+200)改成b=b+200将会出错,原因是当byte类型的变量提升为int类型与int类型的常量200相加后,结果还是int类型,再赋值给byte类型,会出现损失精度的错误。
下面再来看看在视频中出现的一道面试题:
我们可以看到,在编译时,b=3+7;,没有报错,原因是:3和7都是常量,编译器知道结果是10,并且在byte范围之内,因此就自动进行了强转,所以不会报错。而b = b1 + b2;中b1和b2都是变量,编译器编译程序是一行一行编译的,它根本不知道b1和b2到底是多少,两个byte类型的数据相加时,首先都会被提升为int类型,他们的和也是int类型,其值可能会超过byte的范围,因此就会报错。