由于java是强类型的语言,所以要进行有些运算的时候,需要用到类型转换
低-----------------------------------------------------------------------------》高
byte,short,char----> int ----> long----> float ----> double
容量占比从低到高
运算中,不同类型的数据先转化为同一类型,然后再进行运算
public class Conversion {
public static void main(String[] args) {
int i =128;
byte b =(byte) 128;//强制转换 (类型)变量名 高到低需要强制转换
//double b = 128; //自动转换 由低到高转换不需要强制 输入对应的变量类型加名字即可自动转换
//double i =128;
//int b =128;
//这是个错误代码,如果要运算不同类型的数,则必须要将类型转换为一样才能运算。
System.out.println(i);
System.out.println(b);
//得出结果是i = 128 b = -128 为什么会出现这样的结果呢?因为byte是JAVA中最小的整数类型,对着Byte按CTRL键可以看到byte最大只能表示
//最大只能表示127 出现-128的原因是内存溢出。
//---------------------------------------------------------------------------------------------------------------------
/*对于强制转换和自动转换的注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.把大容量转换到低容量的时候需要强制转换
4.转换的时候可能遇到内存溢出,或者精度问题
*/
System.out.println("---------------------------------------------------------------------------------------------");
System.out.println((int) 23.7);
System.out.println((int) 45.89f);
//得出的结果是 23 和 45 说明数据类型转换会存在精度问题
//以上是精度问题的举例
System.out.println("-----------------------------------------------------------------------------------------------");
char c=‘a‘;
int d=c+1;
System.out.println(d);
System.out.println((char)(d));
//类型转换举例
//-----------------------------------------------------------------------------------------------------------------------
int money = 1000_000_000;//数字之前可以用下划线分割,更好区分数字
int year = 20;
int total = money*year;
long total2 =money*year;
long total3 =money*((long)(year));
System.out.println(total);//得出的结果是-1474836480 应该是2000000000 20亿 所以是计算的时候溢出了
System.out.println(total2);//得出的结果同样是-1474836480 由于是默认int 所以转换之前已经出现问题了
System.out.println(total3);//结果是200亿,
原文:https://www.cnblogs.com/hyf05110810/p/15084554.html