//类型的转换
//低————————————>高
//byte->short->char->int->long->float->double
//排序规则:内存大小由低到高,小数优先级高于整数
//运算中,不同类型的数据先转换为同一类型再进行运算
//数据类型转换必须满足如下规则:
//
// 1. 不能对boolean类型进行类型转换。
//
// 2. 不能把对象类型转换成不相关类的对象。
//
// 3. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
//
// 4. 转换过程中可能导致溢出或损失精度,
public class demo3 {
public static void main(String[] args) {
//由高转到低,强制转换,内存溢出
int num1=128;
byte num2=(byte)num1;//
System.out.println(num2);//输出-128
//由高转到低,强制转换,精度丢失
System.out.println((int)3.14f);
System.out.println((long) 8.88f);
System.out.println("*****************");
//由低转到高,自动转换不会出现精度丢失和内存溢出的情况
long num3=num1;
float num4=num1;
double num5=num1;
System.out.println(num3);
System.out.println(num4);
System.out.println(num5);
System.out.println("******************");
//由低转到高,自动转换
System.out.println(‘a‘+1);//输出98
//如果比int类型小的类型做运算,java在编译的时候就会将它们统一强转成int类型。当是比int类型大的类型做运算,就会自动转换成它们中最大类型那个。
long num6=100l;
int num7=100;
System.out.println(num6*num7);
System.out.println(getType(num6*num7));//结果是一个long类型
System.out.println(getType(‘a‘+1));//结果是一个int类型
System.out.println("******************");
//操作数值比较大的时候,注意溢出问题
int money=10_0000_0000;//10亿
int years=20;
System.out.println(money*years);//直接计算,内存溢出
System.out.println(getType(money*years));//结果是int类型
System.out.println(money*(long)years);//需要把其中任意一个往高转一下,结果会自动往高转
System.out.println(getType(money*(long)years));//结果是long类型
}
private static String getType(Object a) {
return a.getClass().toString();
}
}
原文:https://www.cnblogs.com/portal7282/p/14624709.html