数据类型拓展及其面试题
(一)整数拓展
进制: 二进制0b 十进制 八进制0 十六进制0x
public class Demo02 {
public static void main(String[] args) {
int i = 10; //十进制
int i2 = 010;//八进制0
int i3 = 0x10; //十六进制0x (0~9 A~F)
System.out.println(i);//10
System.out.println(i2);//8
System.out.println(i3);//16
}
}
(二)浮点数拓展
public class Demo02 {
public static void main(String[] args) {
float a = 0.1f; //0.1
double b = 1.0/10; //0.1
System.out.println(a==b); //==为比较的意思,结果为false
float c = 2312312323231f;
float d = c + 1;
System.out.println(c==d); //true
}
}
由上述代码的结果表明,浮点数float/double是有限的、离散的,有舍入误差的,是个大约数,接近但不等于。
总结:最好完全避免使用浮点数进行比较
面试题:银行业务怎么表示?钱?
答:不可使用浮点数进行表示,可以使用BigDecimal (数学工具类)。
(三)字符拓展
public class Demo02 {
public static void main(String[] args) {
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
}
}
由上述代码的结果可以得知所有字符本质上还是数字,且’中’转换为整型时输出为20013,可以引出下面的知识。
面试题(底层原理):
Unicode编码表: 每个字符占2字节 ,可以表示65536(现在不止)个字符,如97 = a,65 = A
public class Demo02 {
public static void main(String[] args) {
// 代码表示U0000~UFFFF
char c3 = '\u0061';
System.out.println(c3);//结果为a
}
}
(四)转义字符
-
\t 水平制表符(横向跳格)
-
\n 换行
-
\r 回车
-
\b 退格
-
\f 换页
(五)布尔值拓展
boolean flag = true;
if(flag==true){}
if(flag){} //两行代码是一样的,代码要精简易读
最后补充:
Java中的== 比较的含义
1、对于对象引用类型:比较的是对象的内存地址
2、对于基本类型数据:比较的是它的值