计算机之所以叫“计算机”,其最基本用途之一就是运算,Java常用的运算如下:
- 算术运算
- 关系运算
- 逻辑运算
- 赋值运算
- 其它运算
- 优先级
算术运算
算术运算主要用来处理数学中的加、减、乘、除四则运算。是最简单、最常用的运算符。
1. 除与取模:数据做除法操作时,/ 是求商, % 是取余数。两个整数相除得到的结果是商的整数部分。
2. 自增与自减:在原数据的基础上执行加1或减1的操作。
- 单独使用:放在操作数据的前面和后面效果是一样的,如s++和++s效果一样。
- 参与操作:符号在操作数的前面表示先自增或自减,再参与操作。符号在操作数的后面表示先参与操作,后自增或自减。
运行结果
整数相除:f/n=3
小数相除:f/n=3.500000
取模(求余数):f%n=1
f的值:6, n的值:3
f的值:7, xf的值:7
n的值:2, yn的值:3
关系运算
用于对两个变量或数值进行比较,无论如何运算,最终结果只能为true(真)或false(假),切勿将==误写为赋值号=。
逻辑运算
用于对布尔型数据进行操作,其结果仍为布尔型。
短路运算:以&和&&为例, | 和 || 是一样的道理。
&和&&都表示与操作,当运算两边都为true时,其结果才为true。于是,当左边为false时,即可确定结果为false,右边是否运算已对结果没有影响了。
&:不论左边为true或false,右边都要运算。
&&:当左边为false,右边不在进行运算。
//来源:公众号【时光与字节】
运行结果
短路运算的结果为:false
f的结果为:7
未短路运算的结果为:false
n的结果为:8
分析:
bf为短路与运算的结果,f<5为假,算式右边未计算,所以f的值没有变。
bn是与运算的结果,整个算式都需计算,所以n++被执行了,n自加1。
赋值运算
将常量、变量或是表达式的值赋给一个变量,赋值运算符主要是=(等号)。
扩展赋值运算符(+=,-+,*=,/=,%=):都是将变量与右侧操作数进行算术运算,再将结果赋给变量。如:f+=5等同于f=f+5。
1. 一条语句可对多个变量赋值。
int
2. 扩展赋值运算隐含了强制类型转换,看下图。
上图的代码中,n+=x未报错,但n=n+x报错了。
两个short型相加,结果应为int型。+=赋值符隐含了强制类型转换,所以没有错。
准确的说,n+=x 应该等同于
n=(n的数据类型)(n+x)
其它运算
位运算:按二进制位进行与、或、非和异或的运算。
移位运算:对二进制位进行左移和右移的操作。
- <<左移:左边最高位丢弃,右边补0
- >>右移:右移一位,左边空位根据原数的符号补0或1(正数补0,负数补1)
- >>>无符号右移:右移一位,左边空位补0
//来源【时光与字节】
运行结果
按位与运算:a&b = 2
左移一位:b<<1 = 22
条件运算:比较表达式?表达式1:表达式2
执行规则:先计算比较表达式的值,如果为true,结果为表达式1;否则,结果为表达式2。
int
优先级
一个表达式中出现多个运算符,就有类似“先乘除后加减“这样的先后问题,通常情况下:
1. 优先级高低大致顺序为:自增自减>算术运算>比较运算>逻辑运算>赋值运算;
2. 如果两个运算优先级相同,则左边的表达式要比右边的表达式先处理;
3. 使用小括号吧,小括号能提升算式的优先级,并且会让整个表达式逻辑结构更加清晰。如:(1+3)+(3+2)*2;
具体可参看下表,具有高优先级的运算符在表的上面,较低优先级在表的下面。