基本类型的类型转换
JAVA 所有的数值类型变量可以相互转换。
1.自动类型转换:
如果系统支持把某种基本类型的值直接赋给另一种基本类型的变量,则这种方式被称为自动类型转换。
例如:
1 public class AutoConversion 2 public static void main(String[] args) { 3 // 定义一个int 类型的整数变量 4 int a = 3; 5 // int 类型可以自动转换为 float 类型 6 float f = a; 7 // 输出将会是 3.0 8 System.out.println("f"); 9 10 // 定义一个byte 类型的整数变量 11 byte b = 7; 12 // byte 类型可以转换为 double 类型 13 double d = b; 14 // 输出将会是 7.0 15 System.out.println("d"); 16 } 17 }
并且当任何基本类型的值和字符串值进行连接运算时,基本类型的值将自动类型转换为字符串类型。
例如:
1 public class PrimitiveAndString { 2 public static void main(String[] args) { 3 // 一个基本类型的值和字符创进行连接运算时,基本类型自动转换为字符串 4 String s = 3L + ""; 5 // 输出是长整型 3 6 System.out.println(s); 7 8 // 输出 7hello! 9 System.out.println( 3 + 4 + "hello!"); 10 // 输出 hello!34 11 System.out.println("hello!" + 3 + 4); 12 13 //这两者的输出结果不同 14 //因为 前者先做了3+4 的运算得出等于7,之后与字符串 hello!做连接运算,此时的7是字符串了 15 //而后者是先做连接运算,将3作为字符串输出,之后 hello!3 作为字符串整体和 4 做连接运算 16 } 17 }
2.强制类型转换
如果要将图中的数据类型逆着箭头转换,则必须进行强制类型转换。
强制类型转换的语法格式是: (targetType)value
强制类型转换的运算符是圆括号 () 。这种转换也被称为缩小转换(Narrow Conversion)。
例如:
1 public class NarrowConversion { 2 public static void main(String[] args) { 3 // 定义一个short 整型变量的值为233 4 short sValue = 233; 5 // 强制将一个 short 类型的值转换为 byte类型的值 6 byte bValue = (byte)sValue; 7 // 这个值将输出 -23 8 System.out.println(bValue); 9 10 11 // short 转换 byte 的过程如下: 12 // 00000000 11101001 short类型(16位) 13 // 11101001 byte类型(8位) 14 // 而这时候byte类型代表的数字所表示的已经不是233了,因为第一位是1,所以代表一个负数 15 // 运算得反码为 11101000 16 // 运算得原码为 10010111 17 // 这是byte所表示的数字为 -23 18 19 20 // 定义一个双精度浮点型的值为3.14 21 double dValue = 3.14; 22 // 将 double 类型的值强制转换为 int 整数类型 23 int iValue = (int)dValue; 24 // 这是输出的值为3 25 System.out.println(iValue); 26 27 // 将浮点型数转换为整型是,小数点后面的数字会自动省略,只保留小数点前的数字部分 28 29 } 30 }
值得提出的是 java 默认的整型为 int 类型,默认的浮点型为 double 类型。
表达式类型的自动提升:
当一个算数表达式中包含了多个基本类型的值时,整个算数表达式的数据类型将发生自动提升。
java定义了如下的自动提升规则:
1.所有的 byte 类型、short 类型和 char 类型将被提升到 int 类型。
2.整个算数表达式的数据类型自动提升到与表达式中最高等级操作数同样的类型。操作数的 等级排列如上图。
因为自身是一个初学者,所以有部分借鉴模仿和抄录《疯狂Java讲义》的内容,于文章标题也有写明:只是java学习日记,所以并没有输出知识的能力,只是做一个总结学习。