由于Java是强类型语言,所以在进行有些运算的时候,需要用到类型转换。在运算中不同类型的数据是先转化为同一类型,然后在进行运算。
低----------------------------------------------------------------->高
byte,short,char—>int—>long—>float—>double
小数类型的优先级一定大于整数其余的按大小排列
而类型转换他分为两个一个是强制类型转换一个是自动类型转换
强制类型转换它是以高到低的转换
public static void main(String[] args) {
int i=128;
byte b=(byte)i;//内容溢出
System.out.println(i);
System.out.println(b);}
//运行结果为:128
// -128
从上面我们可以看出直接转换之后为负数而这个是我们进行强制转换的时候比较容易出现的问题内容溢出 byte的范围只有 -128~127所以当128转换为byte是内容溢出了就会随便显示一个数
自动转化和强制类型相反是从低到高转换所以就不存在内容溢出的问题
public static void main(String[] args) {
int a=129;
double c=a;
System.out.println(a);
System.out.println(c);}
//运行结果:129
// 129.0
不能对布尔值进行转换/
不能把对象类型转换为不相干的类型
下不是高容量转换为低容量时侯,强制转换
转换的时候可能存在内存溢出,或者精度问题!
精度问题举例
public static void main(String[] args) {
float a=-45.89f;
double b=23.7;
System.out.println((int)a);
System.out.println((int)b);}
//运行结果:45
// 23
强制转换的话不仅会有内容溢出而且还会出现精度丢失的问题
操作比加大的数的时候注意溢出问题
public static void main(String[] args) {
//JDK新特性,数字之间可以用下划线分割
int money=10_0000_0000;
int year=20;
int total=money*year}
Systen.out.println(total);
//运行结果:-1474836486
计算的时候溢出了所以出现了负的我们换一个容量大的long来看看
public static void main(String[] args) {
//JDK新特性,数字之间可以用下划线分割
int money=10_0000_0000;
int year=20;
long total=money*year;
Systen.out.println(total);}
//运行结果 :-1474836486
我们把它的容量便大了,还是出现了付的。因为 money 和 year 默认是 int 所以计算的时候它的结果也是 int 已经存在问题。所以在转换也没有用
*我们在它运行之前转换看一下
public static void main(String[] args) {
int money=10_0000_0000;
int year=20;
long total=money*(long)year;
Systen.out.println(total);}
//运行结果 :20000000000
原文:https://www.cnblogs.com/dengyi102986/p/14668473.html