在Java数据类型中,浮点数类型有float和double,下面来看一组代码
在一些银行业务中的问题(浮点数拓展):
float f = 0.1f; //0.1
double d = 1.0/10; //0.1
System.out.println(f==d); //false
float f1 = 213546768321321f;
double d1 = f1 + 1;
System.out.println(f==d); //true
是不是超出了认知,明明变量f和d都是0.1,但输出结果是false;
而f1和d1明显不同,但输出结果却是true.
这一切的原因都是浮点数类型float的特性:有限 离散 舍入误差 大约 接近但不等于
我们得出的结论是:最好完全避免使用浮点数进行比较!
解决方法:使用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
得到一个结论:所有的字符本质还是数字!
char字符串涉及到编码问题:
Excel表的长度:2的16次方=65536个;
Unicode表:占用两个字节,65536个,每一个数字对应编码 65=A; 97=a; 20013='中';
Unicode中的编码转义表示:U0000~UFFFF;
看一串代码:
char c3 = '\u0061';//61是十进制97的十六进制的表示,与Unicode表对应 System.out.println(c3);//a
转义字符(C语言):
退格符(\b):使当前行的活跃位置后退一个位置.
换页符(\f):使活跃位置跳到下一页的开端. 注:换页符可用于控制打印机换页,但不会导致 PC 机的显示屏换页.
换行符(\n):使活跃位置跳到下一行的开端.
回车符(\r):使活跃位置返回当前行的开端.
水平制表符(\t):使活跃位置移动若干个位置(通常8个).
垂直制表符(\v):使活跃位置换若干行. 注:\v可用于控制打印机换若干行,但是不会导致PC机的显示屏换行。
转义字符(Java):
\x 十六进制 后面跟两位,则表示单字节编码 \0 八进制 \d 十进制 \u Unicode码,一般后面跟四个十六进制数 \r 回车 \n 换行 \f 走纸换页 \t 横向跳格
留下两个问题:
字符串拓展:
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
为什么跟我们想象的不一样呢,可以从内存的角度思考一下!
再来一个布尔值的扩展:
boolean flag = true; if (flag==true){} if (flag){}
这两种写法本质上是一样的,你是怎么写的呢?