本教程适用于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
不是任何实例。