3.1.1 布尔类型及其运算
在编程语言的设计之初,它们除了可以进行数学计算外,还常常用于逻辑推理和条件判断。为了实现逻辑判断的功能,Java引入了一种布尔类型boolean,用来表示“真”和“假”。该类型的变量只允许两个取值,即true和false,其中true对应真值,而false对应假值。
如同数值变量拥有加减乘除四则运算那样,布尔变量也拥有逻辑方面的四则运算,包括“非”“与”“或”“异或”。下面分别加以介绍。
1.“非”运算
“非”运算求的是某布尔变量的对立值。若原变量值为true,则“非”运算的结果为false;若原变量值为false,则“非”运算的结果为true。Java把符号“!”加在布尔变量前面,表示做“非”运算。
2.“与”运算
“与”运算求的是两个布尔变量的逻辑交集,只有两个变量都为true时,运算结果才为true,其余情况的运算结果都为false。Java把符号“&”放在两个布尔变量之间,表示做“与”运算。
3.“或”运算
“或”运算求的是两个布尔变量的逻辑并集,只要两个变量有一个为true,运算结果就为true;只有两个变量都为false时,运算结果才为false。Java把符号“|”放在两个布尔变量之间,表示做“或”运算。
4.“异或”运算
“异或”运算求的是两个布尔变量的逻辑相异,当两个变量同为true或者同为false时,运算结果为false;当两个变量一个为true另一个为false时,运算结果为true。Java把符号“^”放在两个布尔变量之间,表示做“异或”运算。
下面是对布尔变量开展“非”“与”“或”“异或”等逻辑运算的代码例子(完整代码见本章源码的src\com\control\logic\Bool.java):
// boolean表示布尔类型,该类型的变量只允许两个取值,即true和false boolean zhen=true; // true表示为真 System.out.println("zhen="+zhen); boolean jia=false; // false表示为假 System.out.println("jia="+jia); boolean not=!zhen; // “!”放在布尔变量前面表示开展“非”运算 System.out.println("not="+not); boolean and=zhen&jia; // “&”放在两个布尔变量之间表示开展“与”运算 System.out.println("and="+and); boolean or=zhen|jia; // “|”放在两个布尔变量之间表示开展“或”运算 System.out.println("or="+or); boolean xor=zhen^jia; // “^”放在两个布尔变量之间表示开展“异或”运算 System.out.println("xor="+xor);
上述的四则逻辑运算中,“与”“或”“异或”3种都需要两个布尔变量才能判断,这便意味着:倘若某个变量既参与逻辑运算,又能保存运算结果,此时的逻辑运算就转变为对该变量的自我操作。譬如,对一个布尔变量与另一个布尔值进行“与”运算,且运算结果仍旧保存在该变量中,则可使用运算符“&=”简化赋值操作。如同数值计算“x=x+7”等价于“x += 7”那般,也存在布尔计算“value=value&false”简化成“value &= false”的情况。以此类推,对布尔变量自身做“或”运算,可利用新的赋值运算符“|=”;对布尔变量自身做“异或”运算,可利用新的赋值运算符“^=”。
这些逻辑赋值符的详细应用代码如下:
boolean value=true; // 为布尔变量赋初始值 System.out.println("value="+value); // 对布尔变量做“与”运算,且运算结果仍旧保存在该变量中,则可使用运算符“&=” value &= false; // 该行代码等同于 value=value&false; System.out.println("value="+value); // 对布尔变量做“或”运算,且运算结果仍旧保存在该变量中,则可使用运算符“|=” value |= true; // 该行代码等同于 value=value|true; System.out.println("value="+value); // 对布尔变量做“异或”运算,且运算结果仍旧保存在该变量中,则可使用运算符“^=” value ^= false; // 该行代码等同于 value=value^false; System.out.println("value="+value);