啊哈哈哈哈哈~刚打完三国杀,好爽,于是有看了一下视频。
有关于类型的转换,有两种:自动和硬肛(强制)。
1.自动类型转换
容量小的数据类型可以自动转为容量大的数据类型。
e.g int i = 3;
double d = i;
float f = i;
double d2 = f; //直接换 不用什么硬肛的姿势。
可以直接将int常量直接赋值给byte,short,char等类型变量,而不需要强制类型转只要 不超出其表数范围。
e.g byte(-128~~127)
char(0~~65535)
int i = 200;
byte c = i;
错!!!!!
int i = 126;
byte c = i;
对!!!!!
byte b = 123;
byte b2 = 300;// 错!!!!!
char c = -3;//错!!!!!负数!超范围了
char c2 = ‘a‘;
int i = c2;//(直接)
long do1 = 123213;//(直接)
float f = do1;//可能丢失精度
容量大小是表示范围的大小,与字节无关
2.硬肛类型转换,这么羞羞的姿势点,我还是在例子中说明把。
e.g int i2 = 100;
char c3 = (char)i2;
System.out.println(c3);
//输出结果为字符d
可是当超过强制转换一个类型的表述范围时,转化成完全不同的无意义的值
e.g int i2 = -100;
char c3 = (char)i2;
System.out.println(c3);
//输出结果为字符不认识的
e.g //表达式中类型提升问题
int a = 3;
long b = 4;
int c = (int)(a+b);//做所有的二元运算符(+-*/%)都会有类型提升的问题 比如如果写成 int c = a+b;会报错损失精度。
float f = (float)(a+b);
常见错误:
int money = 10亿;//太多0 劳资就只写中文了
int years = 20;
int all = money * years;
System.out.println(all);//负,因为超出范围了
面对这种情况,就要用类型提升来补锅了。
比如: long all = (long)money * years;
注意,这里提升的只有一个int money整型,如果 (long)(money*years)
同样为负,因为两个int相乘的结果早已超范围了。
所以!!!遇到多数字运算时使结果溢出的情况时,只需提升其中一个元素即刻。
e.g long time = 70L * 60 * 24 * 365 * 70;
System.out.println(time);
嗯好累,我又去玩了