好程序员Java培训:Java变量的类型转换

  Java的数据类型在定义时就已经明确了,但程序中有时需要进行数据类型的转换,Java允许用户有限度地进行数据类型转换。数据类型转换方式分为自动类型转换和强制类型转换两种。

  一、自动类型转换

  自动类型转换也称隐式类型转换,指两种数据类型转换过程中不需要显式地进行声明。Java会在下列的条件成立时,自动做数据类型的转换:

  (1)转换的两种数据类型彼此兼容。

  (2)目标数据类型的取值范围比原类型大。

  类型转换只限该行语句,并不会影响原先定义的变量类型,而且自动类型转换可以保持数据的精确度,不会因为转换而丢失数据内容。

  Java支持自动类型转换的类型,如图所示:

好程序员Java培训:Java变量的类型转换_第1张图片

  自动类型转换示例说明如下:

  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 }

  程序的运行结果如图所示:

好程序员Java培训:Java变量的类型转换_第2张图片

  图中出现了编译错误,提示第4行代码类型不兼容,出现这样错误的原因是将int转换到byte时,int类型的取值范围大于byte类型的取值范围,转换会导致精度损失,也就是用1个字节的变量来存储4个字节的变量值。

  对第4行代码进行强制类型转换,修改为下面的代码:

  byte b = (byte) n;

  程序的运行结果如图所示:

  当试图强制把取值范围大的类型转换为取值范围小的类型时,将会引起溢出,从而导致数据丢失。图2.10中运行结果为-128,出现这种现象的原因是,int类型占4个字节,byte类型占1个字节,将int类型变量强制转换为byte类型时,Java会将int类型变量的3个高位字节截断,直接丢弃,变量值发生了改变,如图所示:

好程序员Java培训:Java变量的类型转换_第3张图片

  以上是好程序员讲师的知识分享,希望可以帮助到你,如果任何疑问欢迎留言,小编会积极地回应的。

你可能感兴趣的:(好程序员Java培训:Java变量的类型转换)