进制转换
二进制0b 十进制 八进制0 十六进制0x
例如:
int i = 10;
int i1 = 010;//八进制0
int i2 = 0x10;//十六进制0x 0~9 A~F 16
System.out.println(i);
System.out.println(i1);
System.out.println(i2);
浮点数扩展
//浮点数扩展
面试题: 银行业务怎么表示?钱 不能用float去比较
用 BigDecimal 数学工具类
//===========================================================================
//float 有限的 离散 舍入误差 大约 接近但不等于
//double
//最好完全避免使用浮点数进行比较
//最好完全避免使用浮点数进行比较
//最好完全避免使用浮点数进行比较
float f = 0.1f;//0.1
double d =1.0/10;//0.1
System.out.println(f==d);//false
float d1 = 233333333333f;
float d2 = d1 + 1;
System.out.println(d1==d2);//true
运行结果:false true
因为float是有限的 离散 舍入误差 大约 接近但不等于,这就表明了它会存在一些问题,用二进制存,但是没有那么正好等于这个数的,所以对一些较大的,或者难存储的二进制会用一些相近的数存储同一个数
简单来说,d1数字太大了不能精确比较,太大的数+1基本没什么区别,所以就会判断相等,类型转换了,精度丢失。
字符拓展
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);//强制类型转换
System.out.println(c2);
System.out.println((int)c2);//强制类型转换
运行结果:
//所有的字符本质还是数字
//编码 Unicode 表:97=a 65=A 2字节 65536 最早的Excel 最长只有2的16次方即65536那么长 0-65535
//U0000 UFFFF
char c3 = '\u0061';
System.out.println(c3);//a
转义字符
System.out.println("Hello\tWorld");
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa==sb);
String sc = "hello world";
String sd = "hello world";
System.out.println(sc==sd);
运行结果:false true
new出来的是对象,会开辟一块新的内存地址 地址不同
sc和sd在内存常量区 内容相同 sc在初始化的时候就已经在常量池中了,sd会判断常量池中是否存在sc的内容
布尔值扩展
boolean flag = true;
if(flag){}
if(flag==true){}
含义一样,都是判断是否flag等于true
less is more! 代码要精简易读
调试