本教程适用于JDK 8。本页面中描述的示例和实践未利用后续版本中引入的改进,并可能使用已不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及已删除或已弃用选项的信息,请参阅JDK发行说明。
相等和关系运算符确定一个操作数是否大于、小于、等于或不等于另一个操作数。大部分这些运算符对你来说可能都很熟悉。记住,在测试两个基本值是否相等时,必须使用"==",而不是"="。
== 等于 != 不等于 > 大于 >= 大于等于 < 小于 <= 小于等于
下面的程序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
&&和||运算符对两个布尔表达式执行条件AND和条件OR操作。这些运算符表现出“短路”的行为,这意味着只有在需要时才会评估第二个操作数。
&& 条件AND || 条件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语句的简写形式(在本课程的控制流程语句部分讨论)。这个运算符也被称为三元运算符,因为它使用三个操作数。在下面的例子中,这个运算符应该理解为:“如果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为true,这个程序将"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不是任何实例。