平等,关系和条件运算符

原文: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

平等与关系运算符

等于和关系运算符确定一个操作数是否大于,小于,等于或不等于另一个操作数。这些运算符中的大多数也可能看起来很熟悉。请记住,在测试两个原始值是否相等时,必须使用“==”,而不是“=”。

  1. == equal to
  2. != not equal to
  3. > greater than
  4. >= greater than or equal to
  5. < less than
  6. <= less than or equal to

以下程序 ComparisonDemo 测试比较运算符:

  1. class ComparisonDemo {
  2. public static void main(String[] args){
  3. int value1 = 1;
  4. int value2 = 2;
  5. if(value1 == value2)
  6. System.out.println("value1 == value2");
  7. if(value1 != value2)
  8. System.out.println("value1 != value2");
  9. if(value1 > value2)
  10. System.out.println("value1 > value2");
  11. if(value1 < value2)
  12. System.out.println("value1 < value2");
  13. if(value1 <= value2)
  14. System.out.println("value1 <= value2");
  15. }
  16. }

输出:

  1. value1 != value2
  2. value1 < value2
  3. value1 <= value2

条件运算符

&&||运算符对两个布尔表达式执行条件 - 和条件 - 或运算。这些运算符表现出“短路”行为,这意味着仅在需要时才评估第二个操作数。

  1. && Conditional-AND
  2. || Conditional-OR

以下程序 ConditionalDemo1 测试这些运算符:

  1. class ConditionalDemo1 {
  2. public static void main(String[] args){
  3. int value1 = 1;
  4. int value2 = 2;
  5. if((value1 == 1) && (value2 == 2))
  6. System.out.println("value1 is 1 AND value2 is 2");
  7. if((value1 == 1) || (value2 == 1))
  8. System.out.println("value1 is 1 OR value2 is 1");
  9. }
  10. }

另一个条件运算符是?:,它可以被认为是if-then-else语句的简写(在本课程的控制流语句部分中讨论过)。该运算符也称为三元运算符,因为它使用三个操作数。在以下示例中,此运算符应读作:“如果someConditiontrue,则将value1的值赋给result。否则,将value2的值赋给result。”

以下程序 ConditionalDemo2 测试?:运算符:

  1. class ConditionalDemo2 {
  2. public static void main(String[] args){
  3. int value1 = 1;
  4. int value2 = 2;
  5. int result;
  6. boolean someCondition = true;
  7. result = someCondition ? value1 : value2;
  8. System.out.println(result);
  9. }
  10. }

因为someCondition为真,所以该程序在屏幕上打印“1”。如果它使代码更具可读性,请使用?:运算符而不是if-then-else语句;例如,当表达式紧凑且没有副作用(例如赋值)时。

类型比较运算符 instanceof

instanceof运算符将对象与指定类型进行比较。您可以使用它来测试对象是否是类的实例,子类的实例或实现特定接口的类的实例。

以下程序 InstanceofDemo 定义父类(名为Parent),简单接口(名为MyInterface)和从父类继承的子类(名为Child)并实现接口。

  1. class InstanceofDemo {
  2. public static void main(String[] args) {
  3. Parent obj1 = new Parent();
  4. Parent obj2 = new Child();
  5. System.out.println("obj1 instanceof Parent: "
  6. + (obj1 instanceof Parent));
  7. System.out.println("obj1 instanceof Child: "
  8. + (obj1 instanceof Child));
  9. System.out.println("obj1 instanceof MyInterface: "
  10. + (obj1 instanceof MyInterface));
  11. System.out.println("obj2 instanceof Parent: "
  12. + (obj2 instanceof Parent));
  13. System.out.println("obj2 instanceof Child: "
  14. + (obj2 instanceof Child));
  15. System.out.println("obj2 instanceof MyInterface: "
  16. + (obj2 instanceof MyInterface));
  17. }
  18. }
  19. class Parent {}
  20. class Child extends Parent implements MyInterface {}
  21. interface MyInterface {}

输出:

  1. obj1 instanceof Parent: true
  2. obj1 instanceof Child: false
  3. obj1 instanceof MyInterface: false
  4. obj2 instanceof Parent: true
  5. obj2 instanceof Child: true
  6. obj2 instanceof MyInterface: true

使用instanceof运算符时,请记住null不是任何实例。