搜档网
当前位置:搜档网 › 黑马程序员:【Java基础】之变量的类型转换(6)

黑马程序员:【Java基础】之变量的类型转换(6)

黑马程序员:【Java基础】之变量的类型转换(6)
黑马程序员:【Java基础】之变量的类型转换(6)

黑马程序员:【Java基础】之变量的类型转换(6) 在编写程序的过程中,有时要将一种数据类型的值赋给另一种不同数据类型的变量,或者要使用不同的数据类型参与运算,这时候就需要进行数据类型的转换。根据转换条件不同,数据类型转换分为两种:自动类型转换和强制类型转换。

1.自动类型转换(也叫隐式类型转换)

实现这种转换要满足两个条件,第一是两种类型彼此兼容,第二是目标类型的取值范围大于源类型。如,当byte型向int型转换时,由于int型取值范围大于byte型,就会发生自动转换。所有的数字类型,包括整型和浮点型彼此都可以进行这样的转换。如:

byte b = 5;

int x = b;

上面的语句将byte类型的变量b的值赋给int类型的变量x,由于int类型的取值范围大于byte类型的取值范围,编译器在赋值过程中不会造成数据失真,所以编译器能够自动完成这种转换,在编译时不报告任何错误。

变量在进行自动类型转换时,不需要做任何特别的说明,下面列举出3种会发生自动类型转换的情况:

(1)、byte类型的数据赋值给short、int、long类型的变量;short类型和char类型的数据赋值给int、long类型的变量;int类型的数据赋值给long类型的变量。

(3)、byte、char、short、int类型的数据赋值给float类型的变量。

(4)、byte、char、short、int、long、float类型的数据赋值给double类型的变量。

2.表达式类型自动提升

所谓表达式是指由变量和运算符组成的一个算式。在表达式中参与运算的变量在运算之前,也有可能发生自动类型转换,这就是表达式数据类型的自动提升,如一个byte型的变量在运算期间类型会自动提升为int型。先来看个例子,如下所示。

public class Test01 {

public static void main(String[] args) {

byte b = 5;

b = b + 10;

System.out.println("b=" + b);

}

}

byte型的b在运算期间类型自动由byte型转换为int型,然后和int型4进行相加计算,其结果仍然是个int值,第4行代码的作用相当于将结果的int值给变量b,由于变量b的类型为byte,存不下int值,因此就出现了如图所示的错误,这时可以通过强制类型转换来解决这个错误。

表达式自动提升会有以下几种情况

(1)、所有的byte型、short型和char的值将被提升到int型。

(2)、如果一个操作数是long型,计算结果就是long型;

(3)、如果一个操作数是float型,计算结果就是float型;

(4)、如果一个操作数是double型,计算结果就是double型。

3.强制类型转换(也叫显式类型转换)

当两种类型彼此不兼容,或目标类型取值范围小于源类型时,自动转换无法进行,这时就需要进行强制类型转换。强制类型转换的通用格式如下:

目标类型变量=(目标类型)值,如:

byte a;

int b;

a=(byte)b;

在上面的代码中,由于表达式类型自动提升,“b+4”的运算结果为一个int值,将一个int 值给byte类型的变量b,就会出错,此时需要显式地声明类型转换,程序便不会报错,这就是强制类型转换。

强制类型转换一般发生于将一个取值范围较大的数赋值给一个取值范围较小的变量的情况,这种转换极容易造成数据丢失精度,使用时需慎重处理。

相关主题