总的来说，Java的条件判断（if）与选择语法与C一致。这一章我们通过几个例子来说明Java的上述语法，同时对一些Java的特性进行讲解。

## 1. 布尔类型与布尔计算

Java的布尔类型和C保持一致，基本的运算符也和C保持一致。

**注意，布尔类型是 boolean，并有大写的布尔类型Boolean。这两个类型是不同的，小写的是基本类型（与C一致）；大写的表示封装类型（类）是面向对象的类型。**

### 1.1. 关系运算

![](img/20230303170551.png)

### 1.2. 逻辑运算

![](img/20230303170617.png)

![](img/20230303170628.png)

![](img/20230303170639.png)

![](img/20230303170647.png)

![](img/20230303170657.png)

### 1.3. 位运算

位运算二进制运算，和C中的位运算是一致的，是指把数字按照二进制的每一位进行运算。

例如：0B 和 0A 代表两个byte,转换成位是：

| 字节1(0x08) | 字节2(0x07) | 说明     |
| --------- | --------- | ------ |
| 0000-1000 | 0000-0111 | 对应的二进制 |

| 位操作          | 结果        | 说明              |
| ------------ | --------- | --------------- |
| 0x0A & 0x0B  | 0000-1000 | 按照每一位对应进行与运算的结果 |
| 0x0A \| 0x0B | 0000-1111 | 按照每一位对应进行或运算的结果 |

**位操作作为了解。**

### 1.4. 选择语句

略

### 1.5. 运算优先级

**尽量使用括号**

### 1.6. 补充例子

#### 1.6.1. 如何循环的读取输入

这个方式在书上没有讲，在考试中可能会遇到这种情况。

```java
import java.util.Scanner;

/**
 * 循环读取，一直到某个特定的条件退出
 * 
 * @author Danny
 *
 */
public class LoopRead {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Please input a sequence of integer, divided by space.");
        int sum = 0;
        while (true) {
            if (scanner.hasNextInt()) {
                sum += scanner.nextInt();
            } else {
                break;
            }
        }
        scanner.close();
        System.out.println("The sum is: " + sum);
    }
}
```

试一试运行该代码，你可以一直用空格分割，来输入多个整数，这时程序并没有任何的回应；当你输入一个非整形的字符，例如‘a’，这时程序退出，并打印刚刚输入整数的累加和。

想一想为什么？重点就在于 `scanner.hasNextInt()` 会一直判断下一个输入是否是整数；如果是整数，就返回真；如果不是整数，就返回假，然后执行break函数。

**可以在if语句前面设置断点，然后使用调试工具进行单步跟踪。你会发现，你输入的时候并不会中断；当敲入回车的时候，调试器才会中断；这证明了Scanner是按照一个回车来一次性的读取输入字符串的；如果没有回车，就会一直等待（这是一个阻塞操作）。**

这个例子很有意思，通过调试过程可以让你更清楚知道Java的每个函数是如何运行的，以及它们都有什么特性。

## 2. 重点

本章的内容中的大部分技术要点都与C保持一致，因此之需要掌握几个例子就可以了：

1. AdditionQuiz
2. SubtractionQuiz
3. ComputeAndInterpretBMI
4. ComputeTax
5. ChineseZodiac
6. 本页的补充例子，循环读取输入