一、整数
定义整数类型时,不同进制数字的写法不同。
//整数拓展:进制 二进制0b 八进制0 十进制 十六进制0x
int i = 0b10; //二进制0b
int i2 = 010; //八进制0
int i3 = 10;
int i4 = 0x10; //十六进制0x 0~9 , A~F
将 i,i2,i3,i4 按顺序输出,得到的结果分别为2,8,10,16。
二、浮点数
计算机在处理浮点数时,是有误差的。因此在程序中,不要用 ‘==’ 比较浮点数大小,容易出错。下面举两个例子进行说明:
float f = 0.1f;
double d = 1.0/10;
System.out.println(f==d);
显然,f = d = 0.1,但是此程序得到的结果为false。
我们再尝试将下面两个浮点数进行比较:
float f2 = 23131312313131f;
float f3 = f2+1;
System.out.println(f2==f3);
f3 = f2+1,我们可以明显看出两数不相等,但是此程序输出的结果为true。
由上面两个例子可知,在Java中,浮点数的运算结果并不精确。
但我们在使用Java开发的过程中,有时会涉及金额处理的问题,需要进行小数的运算。针对这种情况,我们需要使用BigDecimal数学工具类,该类位于java.maths类包下,可以很好地解决浮点数计算无法精确计算的问题 。
三、字符
我们对字符进行强制类型转换,将其转换为数字。如下所示:
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。
其中,97和20013其实是字符 ‘a’ 和字符 ‘中’ 所对应的Unicode编码值。
Unicode编码值的范围是从U0000到UFFFF。
下面,我们尝试使用Unicode编码值,输出其对应的字符:
char c3 = '\u0061';
System.out.println(c3);
最终输出结果为 a,即此编码对应的字符为 ‘a’ 。(注意,0061是十六进制数,换算成十进制数为97,也就是上面的例子中,a所对应输出的整数值。)
下面,我们简单介绍两种常见的转义字符,空格符以及换行符:
//转义字符
// \t 空格(制表符)
// \n 换行
System.out.println("Hello\tWorld");
System.out.println("Hello\nWorld");
输出结果如下所示:
接下来我们再对比两种不同的字符串定义方式。
如下所示,我们 new 两个相同的字符串,并将二者进行比较。
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa==sb);
得到的结果为flase。
我们换一种方式,直接定义两个相同的字符串,再将二者进行比较。
String sc = "hello world";
String sd = "hello world";
System.out.println(sc==sd);
得到的结果为true。
到底是什么原因,导致了两种完全不同的比较结果呢?这涉及到了面向对象的问题,需要从内存的角度进行分析,这里先不进行描述,大致了解即可。
四、布尔值
我们知道,boolean数据类型的值只有两种,true和false。有时我们设定了boolean值之后,需要用if语句进行判断,if语句的写法有以下两种:
boolean flag = true;
if (flag){} //一般采用这种写法
if (flag==true){}
这两种写法的含义是一样的。而我们的代码要尽量做到精简易读,因此我们一般采用第一种写法。