Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
相等性和关系运算符确定一个操作数是否大于,小于,等于或不等于另一个操作数。大多数这些运算符也可能看起来很熟悉。请记住,在测试两个原始值是否相等时,必须使用 "==",而不是 "="。
== equal to != not equal to > greater than >= greater than or equal to < less than <= less than or equal to
以下程序 ComparisonDemo 测试比较运算符:
class ComparisonDemo {
public static void main(String[] args){
int value1 = 1;
int value2 = 2;
if(value1 == value2)
System.out.println("value1 == value2");
if(value1 != value2)
System.out.println("value1 != value2");
if(value1 > value2)
System.out.println("value1 > value2");
if(value1 < value2)
System.out.println("value1 < value2");
if(value1 <= value2)
System.out.println("value1 <= value2");
}
}
输出:
value1 != value2 value1 < value2 value1 <= value2
&& 和 || 运算符对两个布尔表达式执行 Conditional-AND (符件与) 和Conditional-OR (条件或) 操作。这些运算符表现出 "短路" 行为,这意味着第二个操作数仅在需要时才被计算。
&& Conditional-AND || Conditional-OR
以下程序 ConditionalDemo1 测试这些运算符:
class ConditionalDemo1 {
public static void main(String[] args){
int value1 = 1;
int value2 = 2;
if((value1 == 1) && (value2 == 2))
System.out.println("value1 is 1 AND value2 is 2");
if((value1 == 1) || (value2 == 1))
System.out.println("value1 is 1 OR value2 is 1");
}
}
另一个条件运算符是 ?:,它可以被认为是 if-then-else 语句的缩写(在本课节的 Control Flow Statements 部分)。该运算符也被称为 ternary operator (三运算符),因为它使用三个操作数。在以下示例中,应将此运算符理解为:“如果 someCondition 为 true,则将 value1 的值赋给 result。否则,将 value2 的值赋给 result。“
以下程序 ConditionalDemo2 测试 ?: 运算符:
class ConditionalDemo2 {
public static void main(String[] args){
int value1 = 1;
int value2 = 2;
int result;
boolean someCondition = true;
result = someCondition ? value1 : value2;
System.out.println(result);
}
}
由于 someCondition 为真,该程序在屏幕上打印 "1"。使用 ?: 运算符而不是 if-then-else 语句,以使代码更具可读性;例如,当表达式紧凑且没有副作用(例如分配)时。
instanceof 运算符将对象与指定的类型进行比较。你可以使用它来测试对象是否是类的实例,子类的实例或实现特定接口的类的实例。
以下程序 InstanceofDemo 定义了一个父类(名为 Parent),一个简单的接口(名为 MyInterface) ,以及从父类继承并实现接口的子类(名为 Child)。
class InstanceofDemo {
public static void main(String[] args) {
Parent obj1 = new Parent();
Parent obj2 = new Child();
System.out.println("obj1 instanceof Parent: "
+ (obj1 instanceof Parent));
System.out.println("obj1 instanceof Child: "
+ (obj1 instanceof Child));
System.out.println("obj1 instanceof MyInterface: "
+ (obj1 instanceof MyInterface));
System.out.println("obj2 instanceof Parent: "
+ (obj2 instanceof Parent));
System.out.println("obj2 instanceof Child: "
+ (obj2 instanceof Child));
System.out.println("obj2 instanceof MyInterface: "
+ (obj2 instanceof MyInterface));
}
}
class Parent {}
class Child extends Parent implements MyInterface {}
interface MyInterface {}
输出:
obj1 instanceof Parent: true obj1 instanceof Child: false obj1 instanceof MyInterface: false obj2 instanceof Parent: true obj2 instanceof Child: true obj2 instanceof MyInterface: true
在使用 instanceof 运算符时,请记住 null 不是任何事物的实例。