float和double是有问题的
public class YSHG2 { public static void main(String[] args) { float f = 0.1f; double d = 1.0/10; System.out.println(f==d); // ==================================================================== float d1 = 123456789987654321f; float d2 = d1 + 1; System.out.println(d1==d2); } }备注:==号可以来表示是否相等
问题:
分割线之前:输出为false。若正常输出都为0.1。分割线之后:输出为true。 原因: 有限离散舍入误差接近但不等于注意:最好完全避免使用浮点数进行比较
面试题:银行业务(钱数)怎么表示?
BigDecimal(数学工具类)数据类型强制转换
public class YSHG3 { public static void main(String[] args) { char c1 = 'a'; char c2 = '中'; System.out.println(c1); System.out.println((int)c1);//数据类型强制转换 System.out.println(c2); System.out.println((int)c2); } }此处输出: a 97 中 20013
原因:所有的字符本质还是数字
编码问题:unicode (2字节,0 -65536) 表:(97 = a,65 = A )
(U0000 UFFFF) public class YSHG3 { public static void main(String[] args) { char c3 ='\u0061'; System.out.println(c3); } } 此处输出 a转义字符
public class YSHG3 { public static void main(String[] args) { System.out.println("Hello\tWorld"); } } 此处输出 Hello Worldif (flag==true); {}
if (flag);{}
以上两者一样,代码要精简易读,以后几乎见不到第一种
1.分割线之前输出false 2.分割线之后输出true
要从内存级别分析