目录
1.类型转换
1.自动类型转换(隐式转换)
2.强制类型转换(显式转换)
2.类型提升
与long之间:int会被提升为long
2.byte与byte之间的运算
3.总结
1.类型转换
当不同类型之间的变量相互赋值时,会有严格的校验。
如下例子
public class Demo {
public static void main(String[] args) {
int a=4;
long b=4L;
b=a;
}
}对上面代码进行编译:

发现运行通过编译,a和b都是整型,a的范围小,b的范围大,将a的值赋值给b时,编译器会自动将a提升为long类型,然后进行赋值
若进行如下操作:
public class Demo {
public static void main(String[] args) {
int a=4;
long b=4L;
//b=a;//通过编译
a=b;//出现警告
}
}

如上图:将long类型赋予int类型会出现报错现象,long的范围比int范围大,会存在数据丢失,不安全。
总结:当参与运算数据类型不一致时,就会进行类型转换。
java中类型转换分为两类:自动类型转换(隐式转换)和强制类型转换(显式转换)
1.自动类型转换(隐式转换)
原理:代码不需要任何处理,在代码进行编译时,编译器会自动进行处理
特点:数据范围小的 转为 数据范围大的 会自动进行
正如下面例子就是编译器自动将a提升为long类型,然后进行赋值
public class Demo {
public static void main(String[] args) {
int a=4;
long b=4L;
b=a;
}
}2.强制类型转换(显式转换)
原理:当进行操作时,代码要经过一定的格式处理,不能自动而完成
特点:将数据范围大的 转换为 数据范围小的
int a=4;
long b=4L;
a=(int)b;//long--->int 数据范围由大到小,进行强制转换但是要注意必须是相同的数据类型之间才能进行转换
比如:
int a=4;
boolean d=true;
a=d;
d=a;对如上代码进行编译:

说明不兼容的数据类型之间不能进行强制转换
总结:
1.不同的数字类型之间进行赋值,范围更小的可以隐式转换成范围更大的
2.如果要将范围大的转换成范围小的,则需要进行强制转换,但是可能出现数据缺失
3.对于一个字面值常量进行赋值时,Java会自动对其范围进行检查
4.强制类型转换时不一定能成功,不相干不兼容的类型之间是不能进行强制转换的
2.类型提升
原理:不同的数据类型进行运算时,数据类型小的会被提升为数据类型大的
与long之间:int会被提升为long

对上面代码进行改进:
int a=10;
long b=20;
long c=a+b;//编译成功,a+b--->int+long----->long+long,赋值给long
int c1=(int)(a+b);//也能编译成功,但是在强转的时候,可能出现数据丢失2.byte与byte之间的运算
对于如下代码,猜测,c=30并且可以运行成功
public static void main(String[] args) {
byte a=10;
byte b=20;
byte c=a+b;
}但是运行之后,出现了报错:

那么为什莫尼?
原因是:虽然a和b都是byte类型,但是a+b会将a和b都提升为int类型,再进行运算,得到的结果还是int,再赋给c的话,就会出现报错了
修改:
byte a=10;
byte b=20;
int c=a+b;
System.out.println(c);
//或者
byte a=10;
byte b=20;
byte c=(byte)(a+b);
System.out.println(c);总结:
1.不同类型的数据进行混合运算,范围小的会提升为范围大的
2.对于byte \short 这样的比4个字节小的类型,会先提升为4个字节的int,再进行运算
3.总结
本篇文章大致总结了强制类型转换与自动类型转换,概括了int与long、byte与byte之间的类型提升的相关知识,在进行相关问题学习时多多注意如下问题:
1.不同的数字类型之间进行赋值,范围更小的可以隐式转换成范围更大的
2.如果要将范围大的转换成范围小的,则需要进行强制转换,但是可能出现数据缺失
3.强制类型转换时不一定能成功,不相干不兼容的类型之间是不能进行强制转换的
4.不同类型的数据进行混合运算,范围小的会提升为范围大的
5.对于byte \short 这样的比4个字节小的类型,会先提升为4个字节的int,再进行运算
















