@wxf
2018-01-17T18:47:10.000000Z
字数 1533
阅读 841
老马说编程
上节我们介绍了给数据赋值,有了初始值之后,可以对数据进行运算。运算有不同的类型,不同数据类型支持的运算也不一样。本文介绍Java中基本数据类型的主要运算。
算术运算符有加(+)减(-)乘(*)除(/),另外还有取模运算(%),以及自增(++)和自减(--)。取模运算适用于整数和字符类型,其他算术运算适用于所有数值类型和字符类型。在这里我们不在赘述算术运算符的用法,但对于字符类型看上去比较奇特,后续会介绍。
int i = 2147483647 * 2;
//上面的结果为-2,要避免这种情况,我们的结果类型应该使用long,只改为long还是不够的。
//因为运算还是默认按照int进行,需要至少将一个数据表示为long类型,即在后面加L或l
long l = 2147483647 * 2L;
double d = 10/4.0;
double d = 10/(double)4;
无论是使用float还是double,进行运算时都会出现一些令人困惑的现象。比如:
float f = 0.1 * 0.1;
//其结果应该是0.01,但是实际上,却是0.010000001
double d = 0.1 * 0.1;
//实际结果却是0.010000000000000002
这是怎么回事呢?为什么会出现计算不精确的问题呢。究其原因,我们需要理解float和double的二进制表示,后续文章进行分析。
比较运算就是计算两个值之间的关系,其结果是一个布尔类型的值。比较运算适用于所有的数值类型和字符类型。数值类型容易理解,单字符怎么比较呢?后续文章解释。
比较操作符有:大于(>)、大于等于(>=)
小于(<)、小于等于(<=)
等于(==)、不等于(!=)
逻辑运算根据数据的逻辑关系生成一个布尔值true或false。逻辑运算只可应用于boolean类型的数据,但是比较运算的结果是boolean类型的值,所以其他类型数据的比较结果可以进行逻辑运算。
逻辑运算符包括:
- 与(&):两个都为true才是true,只要有一个是false就是false
- 或(|):只要有一个为true就是true,都是false才是false
- 非(!):针对一个变量,true变成false,false变成true
- 异或(^):两个相同为false,两个不相同为true
- 短路与(&&):和&类似
- 短路或(||):和|类似
如果只是进行逻辑运算,它们都是相同的,区别在于同时有其他操作的情况下,例如:
boolean a = true;
int b = 0;
boolean flag = a | b++ > 0;
//flag的结果为true,b的结果为1
因为|后面的表达式也会进行运算,即使只看a已经知道flag的结果。而||则不同,若将代码改为:
boolean a = true;
int b = 0;
boolean flag = a || b++ > 0;
//flag的结果为true,b的结果为0
因为||会“短路”,即在看到||前面部分就可以判定结果的情况下,||会忽略后面的运算。
本节我们介绍了算术运算,比较运算和逻辑运算。但是我们遗留了一些问题,比如:
参考资料: