Java数据类型扩展
1. 整数扩展
- 二进制:0b开头
- 十进制
- 八进制:0开头
- 十六机制:0x开头 0~9 A~F
int i = 10;
int i2 = 010; //八进制
int i3 = 0x10; //十六进制 0~9 A~F
//int i3 = 0x11;
System.out.println(i); //10
System.out.println(i2); //8
System.out.println(i3); //16
2. 浮点数扩展
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
System.out.println(f==d); //false
System.out.println(f); //0.1
System.out.println(d); //0.1
float d1 = 23131312312313f;
float d2 = d1 + 1;
System.out.println(d1 == d2); //true
- 银行业务用 BigDecimal 数据工具类表示
3. 字符扩展
//char c1 = 'a';
char c1 = 'A';
char c2 = '中';
System.out.println(c1); //A
System.out.println((int)c1); //65
System.out.println(c2); //中
System.out.println((int)c2); //20013
char c3 = '\u0061';
System.out.println(c3); //a
- 强制转换
- 所有字符本质还是数字
- 编码 Unicode 表:(97 = a; 65 = A) 2个字节 0~65536个字符 Excel 2 16 = 65536
类型转换
-
低->高:byte, short, char -> int -> long -> float -> double
-
运算中,不同类型的数据先转化为同一类型,然后进行运算
-
强制类型转换:高 -> 低
-
自动类型转换:低 -> 高
-
注意点:
- 不能对布尔值进行转换
- 不能把对象类型转换为不相干的类型
- 在把高容量转换到低容量的时候,强制转换
- 转换的时候可能存在内存溢出,或者精度问题
int money = 10_0000_0000; //JDK7新特性
int years = 20;
int total = money * years;
System.out.println(total); // -1474836480, 计算的时候溢出了
long total2 = money * years;
System.out.println(total2); // -1474836480, 转换之前已经是int了
long total3 = money * ((long)years); //先把一个数转换成Long
System.out.println(total3); //20000000000