目录
数据类型转换
自动类型转换(隐式转换)
强制类型转换(显式转换)
类型提升
数据类型和字符串类型的转换
数据类型转换
数据类型分为“四类八种”:四类——整型、浮点型、字符型、布尔型;八种——字节型、短整型、整型、长整型、单精度浮点数、双精度浮点数、字符型、布尔型。
自动类型转换
自动类型转换:代码不需要经过任何处理,在代码编译时编译器会自动进行处理
特点:数据范围小的转为数据范围大的时会自动进行。
public class Test {
public static void main(String[] args) {
int x = 120;
char y = 10;
x = y;//将字符型变量y的值传给整型变量x
System.out.println(x);
}
}
此时打印结果为10,发生了向上转型。这是一种自动转型,因为整型变量的范围要比字符型变量的范围大得多
public class Test {
public static void main(String[] args) {
int x = 120;
char y = 10;
y = x;//将整型变量x传给字符型变量y的值
System.out.println(x);
}
}
此时编译器会报错:“java: 不兼容的类型: 从int转换到char可能会有损失”。
由此我们得出结论:自动类型转换只能发生在小范围数据变量类型向大范围数据变量类型的转换过程中
强制类型转换
强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成
特点:数据范围大的类型向数据范围小的类型转换
public class Test {
public static void main(String[] args) {
int x = 120;
char y = 10;
y = (char)x;//将整型变量x传给字符型变量y的值
System.out.println(x);
}
}
当强制将一个大范围数据类型传给小数据类型时会发生数据丢失,那么这个所谓的数据丢失是怎样的呢?
public class Test {
public static void main(String[] args) {
int x =128;
byte y = (byte)x;
System.out.println(y);
}
}
此时运行结果为“-128”。我们知道byte类型的数据范围是“-128~127”。我们把这个数据范围看作是一个循环:当一个数据被放入byte类型中后,循环开始。如“128”就走完了一整个循环,停在了下一个循环的第一个整数上——-128。
类型提升
整数在java中默认为int类型;小数在java中默认为double类型。所以会出现下图的报错信息,此时我们就需要进行强制类型提升(显示转换)
数据类型和字符串类型的转换
当两个不同的变量类型转换时,就用到了“包装类”这个概念(例如String和int之间的转换)——“包装类”是java已经为我们准备好的一个类,就如同我们写代码开头的那个“public class ****”。里面有很多方法可以调用,这里我们使用的是“valueof”方法。
数据类型中除了int的包装类为“Integer”,其他数据类型的包装类都为首字母大写的它本身。(如double——Double)