4.类型转换
4.1 认识类型转换
类型转换:顾名思义就是将一个类型转换为另一个类型。
Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验
将把一个双精度类型的值赋给一个整型时程序将会直接报错。
将把一个双精度类型的值转换为整型,然后赋给一个整型时程序将通过。
这就是类型转换的功能,将把一个值赋值给一个不同的类型变量时,就需要类型转换。
类型转换可以分为:隐式类型转换 和 强制类型转换。
4.2 隐式类型转换
隐式类型转换又称为自动类型转换:数据范围小的转为数据范围大的时候,代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
public class Test { public static void main(String[] args) { int a = 10; long b = 20; b = a;//自动类型转换 System.out.println(b); } }
当数据范围大的转为数据范围小的时候,编译器则不会自动处理,则会直接报错
当数据范围大的转为数据范围小的时候,我们则需要用到强制类型转换
4.3 强制类型转换
强制类型转换:当数据范围大的转为数据范围小的时候,编译器则不会自动处理,此时我们则需要自己去转换,由用户自己转换的就叫做强制类型转换。
public class Test { public static void main(String[] args) { int a = 10; long b = 20; a = (int) b;//强制类型转换 System.out.println(a); } }
不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型
如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失
将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查(比如:将一个小数赋给一个整型变量)
强制类型转换不一定能成功,不相干的类型不能互相转换(比如:将布尔类型强制转换为整型)
4.4 类型提升
类型提升:不同类型的数据之间相互运算时,数据类型小的会被提升到数据类型大的
① 数据类型小的 与 数据类型大的进行运算
当一个 整型 和 长整型 进行运算时,整型会被提升为长整型然后进行运算。
上述代码中 a + b ---》int + long ---》long + long 赋值给 int 时会丢失数据,编译时会报错。
上述代码 a + b ---》int + long ---》long + long 赋值给 long,则编译成功。
② 低于4个字节的数据类型进行的运算
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于 4 个字节的类型, 会先提升成 int, 再参与计算。
上述代码中 a + b ---》short + short ---》int + int 赋值给 short 时会丢失数据,编译时会报错
上述代码 a + b ---》short + short ---》int + int 赋值给 int,则编译成功。
不同类型的数据混合运算, 范围小的会提升成范围大的
对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算
5.字符串类型
5.1认识字符串
字符串属于引用类型
public class Test { public static void main(String[] args) { String str1 = "abc"; String str2 = "def"; System.out.println(str1); System.out.println(str2); System.out.println(str1 + str2); } }
C语言中没有字符串类型,如果想在C语言中存储字符串只能运用数组。
在Java中使用 String 类定义字符串类型。
Java 中两个字符串相加就表示把两个字符串拼接起来
5.2 int 转换为 String
方法一:整型变量 + 双引号
public class Test { public static void main(String[] args) { int a = 1; String str = a + ""; System.out.println(str); } }
方法二:用 String 包装类
public class Test { public static void main(String[] args) { int a = 1; String str = String.valueOf(a); System.out.println(str); } }
5.3 String 转换为 int
直接用 Integer 包装类
public class Test { public static void main(String[] args) { String str = "100"; int a = Integer.parseInt(str); System.out.println(a); } }