javaday02(data_transform)

/*
强烈注意

- 强制类型转换,可能造成数据损失精度。
- byte \ short \ char 这三种数据类型可以发生数学运算,但是会首先提升到 int 类型
- boolean类型的不能发生强制类型转换

*/
public class Demo{
public static void main(String[] args){
// 左边是范围小的类型 右边是范围大的类型 java中有常量优化机制,系统会自动判断100是在byte类型所能表示的范围,所以
// 隐藏了强制类型转换 byte b1 = (byte)100;
byte b1 = 100;// 左边是byte类型,右边是int类型,左右两边类型不一致
System.out.println(b1);//100

int res = b1 + 1;// 因为1是int类型,b1会自动提升为int类型,那么int+int类型,会得到一个int类型
System.out.println(res); //101

byte b2 = 10;
byte b3 = 20;

byte b4 = (byte)(b2 + b3);// b2 和 b3 会提升为int类型,所以int+int类型会得到一个int类型,而b2和b3又是变量,所以在编译阶段不能确定
//b2+b3的结果是否在byte所能表示的范围,而又没有进行强制类型转换,所以编译报错
System.out.println(b4);//30


// byte b5 = 7;
byte b5 = 3+4;// java中有常量优化机制,在编译阶段就可以确定3+4的结果一定是在byte类型所能表示的范围,所以赋值成功
System.out.println(b5);//7

System.out.println("================");

char ch = 'a';
System.out.println(ch+1);//98 说明'a'字符在发生数学运算的时候,会转换为int类型的97
// 每一个字符都有一个对应的int类型的整数(ASCII码值)
// 字符数据 跟 整数数据 会有一个对应的对照表: ASII码表


int num = (int)1.2f;
System.out.println(num);//1 小数强制类型转换为整数,只取整数部分

/*
int num = (int)100L;
System.out.println(num);

int num2 = (int)2212345678L;
System.out.println(num2);
*/
}
}

猜你喜欢

转载自www.cnblogs.com/bitrees/p/12083221.html