好程序员Java培训:Java变量的类型转换
Java的数据类型在定义时就已经明确了,但程序中有时需要进行数据类型的转换,Java允许用户有限度地进行数据类型转换。数据类型转换方式分为自动类型转换和强制类型转换两种。
一、自动类型转换
自动类型转换也称隐式类型转换,指两种数据类型转换过程中不需要显式地进行声明。Java会在下列的条件成立时,自动做数据类型的转换:
(1)转换的两种数据类型彼此兼容。
(2)目标数据类型的取值范围比原类型大。
类型转换只限该行语句,并不会影响原先定义的变量类型,而且自动类型转换可以保持数据的精确度,不会因为转换而丢失数据内容。
Java支持自动类型转换的类型,如图所示:
自动类型转换示例说明如下:
byte b = 97; //声明byte型变量值为97
char c = b; //错误,byte类型不能自动类型转换为char类型
float f = b; //正确,byte类型能自动类型转换为float类型
double d = 'c'; //正确,char类型能自动类型转换为double类型
在Java中,任何基本类型的值和字符串进行链接运算“+”时,基本类型的值将自动类型转换为字符串类型,字符串用String类表示,是引用类型。具体示例如下:
String s = 97; //错误,不能直接将基本类型赋值给字符串
String str = 97 + ""; //正确,基本类型的值自动转换为字符串,""代表空字符串
二、强制类型转换
强制类型转换也称为显式转换,指两种数据类型转换过程中需要显式地进行声明。当转换的两种数据类型彼此不兼容,或者目标数据类型的取值范围小于原类型时,而无法进行自动类型转换,此时就需要进行强制类型转换,如例所示:
1 public class TestTypeCast {
2 public static void main(String args) {
3 int n = 128;
4 byte b = n;
5 System.out.println(b);
6 }
7 }
程序的运行结果如图所示:
图中出现了编译错误,提示第4行代码类型不兼容,出现这样错误的原因是将int转换到byte时,int类型的取值范围大于byte类型的取值范围,转换会导致精度损失,也就是用1个字节的变量来存储4个字节的变量值。
对第4行代码进行强制类型转换,修改为下面的代码:
byte b = (byte) n;
程序的运行结果如图所示:
当试图强制把取值范围大的类型转换为取值范围小的类型时,将会引起溢出,从而导致数据丢失。图2.10中运行结果为-128,出现这种现象的原因是,int类型占4个字节,byte类型占1个字节,将int类型变量强制转换为byte类型时,Java会将int类型变量的3个高位字节截断,直接丢弃,变量值发生了改变,如图所示:
以上是好程序员讲师的分析和解说,如果任何疑问欢迎留言,好程序员从平凡到卓越,为梦想而拼搏!