数据类型拓展及面试题讲解
整数拓展:进制
进制:二进制0b、十进制、八进制0、十六进制0x
int i = 10;
int i2 = 010; //八进制0
int i3 = 0x10; //十六进制0x 0~9 A~F 16个
System.out.println(i);
System.out.println(i2);
System.out.println(i3);
浮点数拓展
面试题:银行业务如何表示?(提示:数值需准确)
// float
// double
float f = 0.1f; //0.1
double d = 1.0 / 10; //0.1
System.out.println(f == d);//false
System.out.println(f);
System.out.println(d);
float d1 = 231313131313f;
float d2 = d1 + 1;
System.out.println(d1 == d2);//true
通过以上结果看出,
f和d数值相等,本应输出true,却输出false。
d1和d2数值明显不相等,本应输出false,却输出true。
原因:浮点数是有限且离散的,有时会存在舍入误差,它只能算出大约数,即“接近但不等于”。
因此,
最好完全避免使用浮点数比较。
最好完全避免使用浮点数比较。
最好完全避免使用浮点数比较。
此题可使用BigDecimal,数学工具类,来比较。
字符类拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);//输出 a
System.out.println((int)c1);//强制转换 输出 97
System.out.println(c2);//输出 中
System.out.println((int)c2);//强制转换 输出 20013
所有的字符本质还是数字
此现象涉及到 Unicode编码表 ,其中 97=a ,65=A。
char c3 = '\u0061';
System.out.println(c3);//输出 a
转义字符
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
\t:制表符
\n:换行
更多转义字符可自行百度。
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa == sb);//false
String sc = "hello world";
String sd = "hello world";
System.out.println(sc == sd);//true
sa和sb为新开辟的内存空间,存放的位置不同,比较的是内存地址,因此输出false。
sc和sd为字符串常量,共同指向“hello world”,因此输出true。
boolean flag = true;
if (flag == true){}
if (flag){}
//以上两个条件判断为相同意思,都是判断flag是否为真
//Less is More!代码要精简易读