算术运算符:+、-、*、/、%、++、- -。
关系运算符:>、<、>=、<=、= = 、!=。
赋值运算符:=、+=、-=、*=、/=等。
逻辑运算符:!、&&、||等。
位运算符:~、&、|、^、>>、<<、>>>(无符号右移)。
从参与运算的项数分,可以将算术运算符分为以下3类。
(2)双目运算符:+、-、*、/、%(取余)。
(3)三目运算符:(表达式1)?(表达式2):(表达式3),当表达式1的结果为真时,整个运算的结果为表达式2,否则为表达式3,该运算符是Java语言唯一一个三目运算符,常被使用,需要掌握。
通过下面的例子,来重点学习++、—、%和三目运算符这四个算术运算符。
程序运行结果如图2.11所示,通过这个例子可以看出,++和—这两个运算符放在操作数前或后,决定着是先自增(或自减)再运算,还是先运算再自增(或自减)。
第1章编写了“蓝桥系统”的主界面,其中第五项内容为“计算Java工程师月薪”,接下来单独完成这一模块的功能。 假设Java工程师的月薪按以下方式计算。 Java工程师月薪=月底薪+月实际绩效+月餐补-月保险 其中: - 月底薪为固定值。 - 月实际绩效=月绩效基数(月底薪×25%)×月工作完成分数(最小值为0,最大值为150)/100。 - 月餐补=月实际工作天数×15。 - 月保险为固定值。 计算Java工程师月薪时,用户输入月底薪、月工作完成分数(最小值为0,最大值为150)、月实际工作天数和月保险4个值后,即可以计算出Java工程师月薪。具体代码如下。 本程序需要从控制台获取输入,所以在程序的第一行加入了代码import java.util.Scanner;,引入Scanner工具类,通过该工具类从控制台获取输入。具体获取输入的代码,通过程序中的注释,很容易看明白。 另外,原来在EditPlus的“配置用户工具”中配置的“JAVA”工具,其“动作”选择的是“捕捉输出”,因本程序需要输入,故需要将动作改为“无”(见图2.12)。这样可以在需要输入的时候,启动控制台进行输入操作。

程序的实际运行结果如图2.13所示。
### 2.5.2 逻辑运算符
关系运算符和赋值运算符比较简单,这里不展开介绍。需要注意的是,关系运算符“==”和赋值运算符“=”看起来比较类似,但含义完全不同,“==”用于判断两边是否相等,而“=”是将右边的值赋给左边。 +=、-=等是扩展的赋值运算符,x += y等价于x = x + y,程序员在实际的编程过程中,为了方便阅读,尽量不要使用这种扩展的赋值运算符。 接下来重点介绍逻辑运算符和位运算符。在Java语言中有3种逻辑运算符,它们是逻辑非(用符号“!”表示)、逻辑与(用符号“&&”表示)和逻辑或(用符号“||”表示)。 逻辑非表示取反,其逻辑关系值表如表2.2所示。
|A| !A| |——|——| |true |false| |false| true| 逻辑与的运算规则为:有一个运算数为假,其值为假,两个运算数都为真,其值为真。逻辑与的关系值表如表2.3所示。
逻辑或的运算规则为:有一个运算数为真,其值为真,两个运算数都为假,其值为假。逻辑或的关系值表如表2.4所示。
逻辑运算符在后面流程控制的课程中会经常用到,这里不再赘述。
2.5.3 位运算符
在企业面试Java工程师的时候,也常会问到“&&”和“&”以及“||”与“|”的区别,通过下面的学习,可以清楚地理解逻辑运算符和位运算符的区别。
按位非表示按位取反,其关系值表如表2.5所示。
|A |~A| |——|——| |1 |0| |0 |1| 按位与是逐位逻辑与。按位与的关系值表如表2.6所示。
按位或是逐位逻辑或。按位或的关系值表如表2.7所示。
按位异或是当两个运算位不同时,结果为1,否则为0。按位异或的关系值表如表2.8所示。
阅读下面的程序,分析程序运行结果。
class BitOpr {
public static void main(String[] args){
int a = 129; //二进制10000001
System.out.println("a和b按位与的结果是:" + (a&b)); //按位与的结果为10000000
System.out.println("a和b按位或的结果是:" + (a|b)); //按位或的结果为10000001
//Integer.toBinaryString()方法是将数据按二进制格式输出
//按位非的结果是:11111111111111111111111101111110
System.out.println("a按位非的结果是:" + Integer.toBinaryString((~a)));
System.out.println("a和b按位异或的结果是:" + (a^b)); //按位与的结果为00000001
int c = 5;
//用性能最好的方法计算出5×8的结果
int rst = c<<3;
//整数每左移一位,相当于×2,左移3位相当于×8,因为仅仅是位移,所以速度快
System.out.println("5左移三位的结果是:" + rst);
}
程序运行的结果如图2.14所示,其中程序最后一段演示了“用性能最好的方法计算出5×8的结果”,这也是企业面试中常问的问题。
