运算符
算术运算符
算术运算符用在数学表达式中,主要实现的是算术运算,如常见的加法、减法、乘法、除法等。
表格中的例子中,变量a的值为 5,变量b的值为 3,变量i的值为 1:
其中,自增(++)和自减(–)运算符有两种写法:前缀(++i,–i)和后缀(i++,i–)。
前缀自增自减法(++i,--i): 先进行自增或者自减运算,再进行表达式运算。
后缀自增自减法(i++,i--): 先进行表达式运算,再进行自增或者自减运算
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));
}
}
运行结果如下:
位运算符
Java 定义了位运算符,应用于整数类型(int),长整型(long),短整型(short),字符型(char),和字节型(byte)等类型。位运算时先转换为二进制,再按位运算。
表格中的例子中,变量a的值为 60,变量b的值为 13:
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));
}
}
运行结果如下:
逻辑运算符
逻辑运算符是通过运算符将操作数或等式进行逻辑判断的语句。
表格中的例子中,假设布尔变量 a 为真,变量 b 为假:
当使用&&(与)逻辑运算符时,在两个操作数都为 true 时,结果才为 true,但是当得到第一个操作为 false 时,其结果就必定是 false,这时候就不会再判断第二个操作了。
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));
}
}
运行结果如下:
关系运算符
关系运算符生成的是一个 boolean(布尔)结果,它们计算的是操作数的值之间的关系。如果关系是真实的,结果为 true(真),否则,结果为 false(假)。
表格中的例子中,假设变量 a 为 3,变量 b 为 5:
除了上表列出的二元运算符,Java 还有唯一的一个三目运算符 ?: 。
语法格式: 布尔表达式?表达式 1 : 表达式 2
运算过程:如果布尔表达式的值为true ,则返回 表达式1 的值,否则返回 表达式2 的值。
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));
}
}
运行结果如下:
强调:
==和!=适用于所有的基本数据类型,其他关系运算符不适用于boolean,因为 boolean 值只有true和false,比较没有任何意义。
==和!=也适用于所有对象,可以比较对象的引用是否相同。
引用:Java 中一切都是对象,但操作的标识符实际是对象的一个引用。
运算符的优先级
运算符的优先级是帮助我们在一个表达式中如何对于不同的运算符和相同的运算符,进行正确的运算顺序。
运算符的优先级不需要特别地去记忆它,比较复杂的表达式一般使用圆括号()分开,提高可读性。