java学习
1.浮点数扩展
少用浮点数进行比较,因为有误差
例:
// 比较俩浮点数是否相同
float f1 = 123456f;
float f2 = f1 + 1;
System.out.println(f1==f2);//true
看出俩值并不相等结果却相等,原因是浮点数表示的字节数是有限的也是离散的,他有些数字没办法精确表示,所以用了舍入误差,结果只能是一个大约数。
以后会用到一个工具类(BigDecimal-数学工具类)
2.字符扩展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);//强制转换
System.out.println(c2);
System.out.println((int)c2);//强制转换

原因是所有的字符本质还是数字,用Unicode编码变成现在能认识的字,Unicode可以处理各种文字,占2个字节,以前最多表示216=65536字符,现在更多。
转义字符
System.out.println("Hello\nWord);

3.布尔值扩展
boolean flag = true;
if (flag==true){}//新手
if (flag){}//老手
其实这俩行代码是一样的,因为它默认为true,要代码精简易读最好用后面的那种。
4.类型转换

小数的优先级大于整数
int i = 123;
byte b = (byte)i;//赋值给b要将i强制转换
System.out.println(i);
System.out.println(b);

结果变为负数是因为byte最大值是127,给它赋值128就内存溢出了。
类型转换有两种(强制转换和自动转换)
- 强制转换 由高转到低
格式需要(类型)变量名 - 自动转换 由低转到高
直接写=
操作比较大的数的时候,注意溢出问题
数字可以加下划线好分辨,不影响输出
int money = 10_0000_0000;
int years = 20;
int total = money*years;//得出是负数,计算的时候溢出了
long total2 = money*years;
//还是负数,因为结果计算完默认是int然后再转换,转换之前已经存在问题了
long total3 = money*((long)years);//先把一个数转换为long,输出200_0000_0000
所以最好先转换再求结果

被折叠的 条评论
为什么被折叠?



