标签:
在Java程序中,不同的基本类型的值经常需要进行相互转换。
Java语言所提供的7种数值类型之间可以相互转换,有两种类型转换方式:自动类型转换和强制类型转换。
Java所有的数值型变量可以相互转换,如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动类型转换。
当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统将可以进行自动类型转换,否则就需要强制转换。
表数范围小的可以向表数范围大的进行自动类型转换,就如同有两瓶水,当把小瓶里的水倒入大瓶中时不会有任何问题。
Java支持自动类型转换的类型如下所示,左边的数值类型可以自动类型转换成箭头右边的数值类型。
1),byte->short->int->long->float->double
2),char->int->long->float->double
public static void main(String[] args) { // 下面3行代码int类型自动转换成float类型 int a = 6; long b = a; System.out.println(b); }
当把任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动类型转换为字符串类型,虽然字符串类型不是基本类型,而是引用类型。
如果希望把基本类型的值转换为对应的字符串时,可以把基本类型的值和一个空字符串进行连接。
public static void main(String[] args) { // 一个基本类型的值和字符串进行连接运算,基本类型的值自动转换成字符串 int a = 6; System.out.println(a + ""); // 下面的语句输出7LinkinPark System.out.println(3 + 4 + "LinkinPark"); // 下面的语句输出LinkinPark34 System.out.println("LinkinPark" + 3 + 4); }
如果希望上面自动转换中,箭头右边的类型转换成左边的类型,则必须进行强制类型转换。
强制类型转换的语法格式:(targetType)value,强制类型转换的运算符是圆括号(())。
当进行强制类型转换时,类似于把一个大瓶子里面的水倒入一个小瓶子,如果大瓶子里面的水不多还好,如果大瓶子里面的水很多,将会引起溢出,从而造成数据丢失。
这种类型也称为缩小转换。
注意:当试图强制把表数范围大的类型转换为表示范围小的类型时,必须格外小心,因为非常容易引起信息丢失。
public static void main(String[] args) { // 下面3行代码输出-23,典型的溢出 int intValue = 233; byte byteValue = (byte) intValue; System.out.println(byteValue); // 下面3行代码输出3,典型的信息丢失 double doubleValue = 3.14; int iValue = (int) doubleValue; System.out.println(iValue); }
当一个算数表达式包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升。
Java定义了如下的自动提升规则:
1),所有的byte类型,short类型和char类型将被提升到int类型。
2),整个算术表达式的数据类型自动提升到表达式中最高等级操作数同样的类型。
public static void main(String[] args) { // 下面2行代码出错,shortValue类型参与运算,类型自动提升到int // 将一个int类型的值赋给一个short类型的值,编译不过 short shortValue = 5; shortValue = shortValue - 2; // 下面4行代码正确,3个不同类型的值参与运算,类型提升到最高的类型 // double,int,byte中,double类型最高,所以结果double类型 byte byteValue = 4; int intValue = 1; double doubleValue = 2.33; double result = byteValue + intValue + doubleValue; System.out.println(byteValue + intValue + doubleValue); // 下面代码的类型同样为double System.out.println(doubleValue / intValue); }
标签:
原文地址:http://blog.csdn.net/u011794238/article/details/51360214