一. 自动类型转换[熟知]
举个例子,便于理解
public static void main(String[] args) {
byte a = 20;
int b = a;
}
java遵循类型匹配原则 ,但是为什么 byte 类型的a 能赋值给 int 类型的b
因为此时发生了自动类型转换
public static void main(String[] args) {
char a = 105;
System.out.println(a );
}
这就是取值范围小的byte会自动转换成int类型,这是类型的范围从小到大的转换图.
二.强制类型转换[熟知]
同样举个例子,便于理解
public static void main(String[] args) {
int a = 20;
// Incompatible types.Required:byte Found:int
byte b = a;
}
//此时我们如果还需要赋值 就可以使用强制类型转换: 在需要转换的类型前面添加 (需要转成的类型)
public static void main(String[] args) {
int a = 20;
byte b = (byte) a;
}
//但是注意 强制类型转换其实就是欺骗编译器,运行的时候可能会出现数据溢出的情况
public static void main(String[] args) {
int a = 129;
byte b = (byte)a;
System.out.println(b);
}
//此时数据溢出 输出-127 为啥是-127原因是经过了二进制的原码 反码 补码等运算
强制类型转换格式:
在强制类型前面加括号,里面写下你要强制转换的类型;
eg: int a = 20;
byte b = (byte)a;
三. 隐式类型转换[熟知]
举个例子好理解
public static void main(String[] args) {
byte a = 128;
float b = 20.5;
}
//说明 直接写的常量数字 也是有数据类型的 , 10 数据类型是 int 20.5数据类型是double
//但是 我们这样赋值就不会出问题
public static void main(String[] args) {
byte a = 127;
}
//此时127还是int 但是在byte的范围之内 所以发生了隐式类型转换
public static void main(String[] args) {
float a = 20.5F;
long b = 999999999999L;
}
//还有一种情况,也是一道经典的面试题:请问以下代码有问题吗?为什么?
public static void main(String[] args) {
short a = 10;
a = a +5;
short b = 20;
b+=5;
}
//第一个a=a+5有问题 a+5的结果会自动提升为int 但是 b+=5不会出问题因为最底层代码是 b = (short)(b+5);
public static void main(String[] args) {
short s1 = 10;
short s2 = 20;
short s3 = s1+s2;
}
关于类型转换大致就是这些,希望大家认真理解,都是干货,最后谢谢大家的点赞关注
版权声明:本文为QAQwin原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。