由于java是强类型语言,所以在进行有些运算的时候,我们需要用到类型转换
容量: 低 ---------------------------------------------> 高
byte,short,char-> int -> long -> float -> double
//本节是强制类型转换
//容量:低 ------------------------------------------> 高
// byte,short,char-> int -> long -> float -> double
public class demo2 {
public static void main(String[] args) {
//强制转换 高->低 格式:(数据类型关键字)变量名
int a = 128;
byte b = (byte) a;//强制类型转换
System.out.println(b);//输出-128,不是128,可以去看看补码。或者我考虑录一期视频讲讲。
//自动转换 低->高 不需要任何操作,自动完成
int a2 = 128;
double b2 =a2;//自动转换
System.out.println(b2);
//这个看着玩
int any_unicode = 249;
char unicode_char = (char)any_unicode;//高转低,强转
System.out.println(unicode_char);//输出249对应的unicode码
/*
注意点:
1. 不能对布尔值进行转换(布尔是位,其他的是Byte起步)
2. 不能把对象转换为不相干的类型
3. 把容量高的转到容量低的时候,强制转换;反之,自动转换
4. 转换的时候可能造成内存溢出,或者精度问题
*/
//下面看看造成精度问题的实例
System.out.println((int)21.2);//输出21
System.out.println((int)2000.122f);//输出2000
}
}
//操作比较大的数的时候,注意溢出问题
public class demo4 {
public static void main(String[] args) {
//JDK新特性,数字之间可以用下划线分割
int money = 1000_0000;
int num = 1000;
int total = money*num;
System.out.println(total);//输出1410065408,实际上是10**10,说明有问题。内存溢出。
//那我么试试用long来看看能不能装下
long total2 = money*num;
System.out.println(total2);/* 输出还是1410065408,问题在于money*num的结果默认用int来装,
int装的结果就是1410065408D,然后再将这个数转为补码装到long,所以long的值为1410065408 */
//正确做法:运算前强行转换,
//低容量类型和高容量类型进行算术运算,低容量类型会自动转换为高容量类型
long total3 = money*(long)num;
System.out.println(total3);//输出10**10,正确
//拓展
String total3_s = Integer.toBinaryString(money);//int转二进制字符串
System.out.printf(total3_s);
}
}