复习到了运算符这块,整理一下笔记,以备后续参考。
运算符:运算符顾名思义是一种符号,它是连接一个以上的操作符,实现某种功能的运算。
目录
一、算数运算符
二、位运算符
三、逻辑运算符
四、关系运算符
五、运算符优先级
根据需要点击目录可直接跳转。
算术运算符用在数学表达式中,主要实现的是算术运算,如常见的加减乘除等。
表格中的例子中,变量 a
的值为 5,变量 b
的值为 3,变量 i
的值为 1:
其中,自增 (++) 和自减 (--) 运算符有两种写法:前缀(++i,--i)和后缀(i++,i--)。
新建一个源代码文件 ArithmeticOperation.java
:
public class ArithmeticOperation {
public static void main(String args[]) {
int a = 5;
int b = 3;
int c = 3;
int d = 3;
System.out.println("a + b = " + (a + b));
System.out.println("a - b = " + (a - b));
System.out.println("a * b = " + (a * b));
System.out.println("a / b = " + (a / b));
System.out.println("a % b = " + (a % b));
System.out.println("a++ = " + (a++));
System.out.println("++a = " + (++a));
System.out.println("b-- = " + (b--));
System.out.println("--b = " + (--b));
System.out.println("c++ = " + (c++));
System.out.println("++d = " + (++d));
}
}
编译运行:
$ javac ArithmeticOperation.java
$ java ArithmeticOperation
a + b = 8
a - b = 2
a * b = 15
a / b = 1
a % b = 2
a++ = 5
++a = 7
b-- = 3
--b = 1
c++ = 3
++d = 4
Java 定义了位运算符,应用于整数类型 (int
),长整型 (long
),短整型 (short
),字符型 (char
),和字节型 (byte
) 等类型。位运算时先转换为二进制,再按位运算。
表格中的例子中,变量 a
的值为 60(二进制:00111100
),变量 b
的值为 13(二进制:00001101
):
新建一个源代码文件 BitOperation.java
:
public class BitOperation {
public static void main(String args[]) {
int a = 60;
int b = 13;
System.out.println("a & b = " + (a & b));
System.out.println("a | b = " + (a | b));
System.out.println("a ^ b = " + (a ^ b));
System.out.println("~a = " + (~a));
System.out.println("a << 2 = " + (a << 2));
System.out.println("a >> 2 = " + (a >> 2));
System.out.println("a >>> 2 = " + (a >>> 2));
}
}
编译运行:
$ javac BitOperation.java
$ java BitOperation
a & b = 12
a | b = 61
a ^ b = 49
~a = -61
a << 2 = 240
a >> 2 = 15
a >>> 2 = 15
逻辑运算符是通过运算符将操作数或等式进行逻辑判断的语句。
表格中的例子中,假设布尔变量 a
为真(true
),变量 b
为假(false
):
&&
与 ||
是具有短路性质,当按优先级顺序计算到当前表达式时,表达式的结果可以确定整个表达式的结果时,便不会继续向后进行判断和计算,而直接返回结果。
例如:当使用 &&
逻辑运算符时,在两个操作数都为 true
时,结果才为 true
,但是当得到第一个操作为 false
时,其结果就必定是 false
,这时候就不会再判断第二个操作了。在计算表达式 (a & b) && (a | b)
时,首先计算 a & b
得到了 false
,因为之后是 &&
,任何值与 false
进行与操作都是 false
,所以可以不用再计算下去,而直接返回 a & b
的结果 false
。
新建一个LogicOperation.java:
public class LogicOperation {
public static void main(String args[]) {
boolean a = true;
boolean b = false;
System.out.println("a && b = " + (a && b));
System.out.println("a || b = " + (a || b));
System.out.println("!a = " + (!a));
System.out.println("a ^ b = " + (a ^ b));
}
}
编译运行:
$ javac LogicOperation.java
$ java LogicOperation
a && b = false
a || b = true
!a = false
a ^ b = true
关系运算符生成的是一个 boolean
(布尔)结果,它们计算的是操作数的值之间的关系。如果关系是真实的,结果为 true
(真),否则,结果为 false
(假)。
表格中的例子中,假设变量 a
为 3,变量 b
为 5:
除了上表列出的二元运算符,Java 还有唯一的一个三目运算符 ?:
。
语法格式:
布尔表达式 ?表达式 1 : 表达式 2;
运算过程:如果布尔表达式的值为 true
,则返回表达式 1的值,否则返回表达式 2的值。
新建一个源代码文件 RelationalOperation.java
:
public class RelationalOperation {
public static void main(String args[]) {
int a = 3;
int b = 5;
System.out.println("a == b = " + (a == b));
System.out.println("a != b = " + (a != b));
System.out.println("a > b = " + (a > b));
System.out.println("a < b = " + (a < b));
System.out.println("a >= b = " + (a >= b));
System.out.println("a <= b = " + (a <= b));
System.out.println("a > b ? a : b = " + (a > b ? a : b));
}
}
编译运行:
$ javac RelationalOperation.java
$ java RelationalOperation
a == b = false
a != b = true
a > b = false
a < b = true
a >= b = false
a <= b = true
a > b ? a : b = 5
强调:
==
和 !=
适用于所有的基本数据类型,其他关系运算符不适用于 boolean
,因为 boolean
值只有 true
和 false
,比较没有任何意义。==
和 !=
也适用于所有对象,可以比较对象的引用是否相同。引用:Java 中一切都是对象,但操作的标识符实际是对象的一个引用。
运算符的优先级是帮助我们在一个表达式中如何对于不同的运算符和相同的运算符,进行正确的运算顺序。
运算符的优先级不需要特别地去记忆它,比较复杂的表达式一般使用圆括号 ()
分开,提高可读性。
参考资料:实验楼学习文档