数据类型
整数扩展
- 二进制 int i0 = 0b;
- 十进制 int i =10;输出10
- 八进制 int i2 = 010; 输出8 (0)
- 十六进制 int i3 = 0x10; 输出16 (0X)
浮点数扩展
问 :当float f = 0.1f; ,double d = 1.0/10; System.out.println(f==d);
float f1 = 225522222f; float f2 = f+1; System.out.println(f1==f2);
答:第一个输出为flase,第二个输出为true,当超过或等于16777216f的时候,输出都为true
-
float是有限的,也是离散的,舍入误差,大约 ,接近不等于
最好用浮点数进行比较
- 银行业务怎么表示钱? 用BigDecimal类型
字符扩展
char c1= ‘a’; char c2 = ‘中’;
输出强制转换成int类型:
System.out.println((int)c1);//输出是97
System.out.println((int)c2);//输出是20013
-
所有字符本质都是数字
-
编码Unicode表 (97 = a) Unicode表能容纳的字符 65536 <2的16次方>
char c3 = ‘\u0061’; 输出是a // U0000 UFFFF
- 转义字符 比如: \t ‘空格’ \n ‘换行’
布尔值扩展
略
数据转换
问题: int i = 128; byte b = (byte) i; 输出b的结果
答: 输出结果为-128,原因是byte 类型的取值范围是-128至127,强转为byte类型后,超出了byte取值范围,导致内存溢出了。
-
强制转换 由高到低
-
自动转换 由低到高
低 ---------------------------------------------------------> 高
byte,short,char ->int -> long -> float -> double
- 小数点的优先级高于整数
- 数据运算中,不同类型的数据转换成同一类型,之后进行运算。
运算问题: int money = 10_0000_0000; int year = 20; 试问 long total = money * year ;是否会造成内存溢出?为什么?
如果是 long total1 = money * (long) year;是否会有内存溢出现象?
答: long total = money * year ;会造成内存溢出,因为超出了int的取值范围,且运算时是先int类型进行运算,运算后再转换成long类型。
total1 = money * (long) year;不会造成内存溢出,因为先转换成long类型,之后再进行运算。
注意点:
- 不能对布尔型进行转换;
- 不能把对象转换成不相干的类型;
- 在高容量转换成低容量的时候,进行强制转换;
- 转换时可能存在内存溢出,或精度问题。