1、整数拓展
关于整数部分,相信大部分人都听说过进制问题,例如常见的有十进制,八进制,十六进制等等的问题,那么在平时编写Java代码时怎么表示这些进制呢?
1 十进制整数,如:99, -500, 0。 2 3 八进制整数,要求以 0 开头,如:015。 4 5 十六进制数,要求 0x 或 0X 开头,如:0x15 。
在Java代码中:
1 //整型 2 int i=10; 3 int i2=010; 4 int i3=0x10; 5 System.out.println(i); //10 6 System.out.println(i2); //8 7 System.out.println(i3); //16
2、浮点数拓展
在浮点数这一块,操作的时候有一个很明显的问题,就是使用float和double类型的数据都不适合用在一些要求数据精度较高并且不容许有舍入误差的金融计算领域。
如果需要进行不产生舍入误差的精确数字进行计算的话,需要使用一个数学工具:BigDecimal
关于这一点可能很多才接触Java的朋友会有疑惑,那么我们可以用一个简单的代码来测试一下:
1 public static void main(String[] args) { 2 float f = 0.1F; 3 double d = 1.0/10; 4 System.out.println(f == d); 5 6 float d1 = 2131231231f; 7 float d2 = d1+1; 8 if(d1==d2){ 9 System.out.println("d1==d2"); 10 }else{ 11 System.out.println("d1!=d2"); 12 } 13 }
在验证这段代码前,大家可以自己想一下最后的输出结果。
这个结果可能是很多人都没有想到的,这一点也是很好理解的,由于字长有限,浮点数能够精确表示的数是有限的,因而也是离散的。浮点数一般都存在舍入误差,很 多数字无法精确表示,其结果只能是接近,但不等于;二进制浮点数不能精确的表示0.1,0.01,0.001这样 10的负次幂。并不是所有的小数都能可以精确的用二进制浮点数表示。
所以在日后的程序开发中,最好完全避免使用浮点数来进行比较,特别是在一些对数字精度要求特别高的场景下。
而关于大数值的使用,Java也提供相应的类供我们使用:
大数值:Java.math下面的两个有用的类:BigInteger和BigDecimal,这两个类可以处理任意长度的数值。
BigInteger实现了任意精度的整数运算。
BigDecimal实现了任意精度的浮点运算。
浮点数使用总结:
1、默认是double
2、浮点数存在摄入误差,很多数字不能精确表示。如果需要进行不产生舍入误差的精确数字计算,需要使用BigDecimal类。
3、避免比较中使用浮点数
3、字符型拓展:
单引号用来表示字符常量。例如‘A’是一个字符,它与“A”是不同的,“A”表示一个字符串。(这里要注意的是,字符串是一个类,他并不是一个基本数据类型,这就好比渣男一样,你以为他是一个好人,其实并不是,之前我也以为他是一个好人,可惜并不是)。
char 类型用来表示在Unicode编码表中的字符。
Unicode编码被设计用来处理各种语言的所有文字,它占2个字节,可允许有65536个字符;
在使用char的时候,要了解到,字符是可以转int类型的:
1 public static void main(String[] args) { 2 char c1 = 'a'; 3 char c2 = '中'; 4 System.out.println(c1); 5 System.out.println((int)c1); 6 System.out.println(c2); 7 System.out.println((int)c2); 8 }
结果如下:
Unicode具有从0到65535之间的编码,他们通常用从’u0000’到’uFFFF’之间的十六进制值来表示(前缀为 u表示Unicode)
1 char c3 = 'u0061'; 2 System.out.println(c3); //a
除此之外,大家还应该了解一些常用的转义字符:
4、布尔型拓展
布尔型其实没什么好说的,但还是要注意一些小细节:
boolean类型(一位,不是一个字节),就是0|1
boolean类型有两个值,true和false,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。
boolean 类型用来判断逻辑条件,一般用于程序流程控制。
而且在写判断语句的时候要秉持“less is more”思想:
1 boolean flag = false; 2 if(flag){ 3 // true分支 4 }else{ 5 // false分支 6 }
写成这样,而不是:
1 if (is == true && un == false ) {...}