//数据类型转换细节
//创建一个ConvertDetail类
public class ConvertDetail {
//创建一个main主方法
public static void main(String[] args) {
//数据类型自动转换细节
//细节1:不同数据类型混合运算时会自动转换成最高的精度进行运算
//自动转换的两条路线:
//char->int->long->float->double
//byte->short->int->long->float->double
//例:
int a = 1;
float b = 2.1f;
double c = 3.2;
//int sum = a + b + c; //报错
// float sum1 = a + b + c; //报错
double sum1 = a + b + c; //正常运行
System.out.println(sum1);
//输出:6.2999999046325685
//单精度转双精度的时候,双精度会对单精度进行补位,导致出现偏差。
//细节2:精度高的数据类型不能赋值给精度低的数据类型
//而精度低的数据类型能赋值给精度高的数据类型,例:
//int d = 1.1; //报错,1.1为double型
//float d = 1.1; //报错,1.1为double型
double d = 1.1; //正常运行
double e = 1; //正常运行,1为int型
double f = 1.1f; //正常运行,1,1f为float型
System.out.println(d); //1.1
System.out.println(e); //1.0
System.out.println(f); //1.100000023841858
//细节3:当byte char short参与运算时,数据类型自动转换成int型,例:
byte i = 1;
char j = 2;
short k = 3;
//byte sum2 = i + j + k; //报错,从int转换到byte可能会有损失
//char sum2 = i + j + k; //报错,从int转换到char可能会有损失
//short sum2 = i + j + k; //报错,从int转换到short可能会有损失
int sum2 = i + j + k; //正常运行
//相同类型(三种内)相加也会报错
byte l = 1;
//byte sum3 = i + l; //报错,从int转换到byte可能会有损失
int sum3 = i + l; //正常运行
//细节4:boolean型不参与类型转换,例
boolean m = true;
//double n = m; //报错,不兼容的类型: boolean无法转换为double
//细节5:(byte short)和char不能相互转换,例
byte o = 1;
short p = 2;
char q = 3;
//char r = o; //错误: 不兼容的类型: 从byte转换到char可能会有损失
//char s = p; //错误: 不兼容的类型: 从short转换到char可能会有损失
//byte t = q; //错误: 不兼容的类型: 从char转换到byte可能会有损失
//short u = q; //错误: 不兼容的类型: 从char转换到short可能会有损失
//细节6:自动提升原则,表达式结果中的的类型自动提升为操作数中最大的类型
//与细节1类似
//数据类型强制转换细节
//细节1:高精度向低精度数据类型转换时,需进行强制转换
//加上 (目标数据类型) 即可,但要注意此举可能会丢失数据,例
int v = 127;
byte w = (byte)v;
System.out.println(w); //输出:127
int x = 130;
byte y = (byte)x;
System.out.println(y); //输出:-126
//细节2:强制转换只对最近的操作数有效,往往会使用小括号提升优先级,例
//int z = (int)3 * 2.1 + 1 * 1.1; //错误,(int)3为int,但(int)3 * 2.1 -> double
int z = (int)(3 * 2.1 + 1 * 1.1);
System.out.println(z); //输出7,double7.4转换后丢失数据变为int7
//细节3:byte short char参与运算时,当作int型处理,同自动转换细节3
}
}
Java学习笔记001——数据类型转换细节
于 2021-12-11 12:40:07 首次发布