# 平等、关系和条件运算符

# 平等和关系运算符

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

==      相等
!=      不等
>       大于
>=      大于等于
<       小于
<=      小于等于
1
2
3
4
5
6

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

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”);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

输出

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

# 条件运算符

&&|| 在两个布尔表达式运算中执行的时候。这些操作符表现出「短路」的行为,这意味着只有在需要时才对第二个操作数进行评估。

以下程序, 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");
    }
}
1
2
3
4
5
6
7
8
9
10
11

另一个条件运算符?:可以被认为是一个 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);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

因为这 someConditio 为 true,这个程序打印「1」到屏幕。 使用?:操作符而不是if-then-else声明,如果它使您的代码更可读;例如,当表达式紧凑并且没有副作用(如分配)时。

# 类型比较运算符 instanceof

所述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 {}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

输出

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

使用 instanceof 操作符时,请记住,null 不是任何对象的实例。