逻辑补语运算符?

时间:2011-09-13 09:49:44

标签: java oop boolean boolean-logic unary-operator

是否可以使用逻辑运算符“!”在包含true或false值的对象上?专门针对这样的对象?

public class Briefcase {
    private final double amount;
    private final String model;
    private boolean removed = false;
    private String face;

    public Briefcase(double amount, int face, String model) {
        this.face = Integer.toString(face);
        this.amount = amount;
        this.model = model;
    }

    public double getAmount() {
        return amount;
    }

    @Override
    public String toString() {
        return face;
    }

    public String getModel() {
        return model;
    }

    public void remove() {
        removed = true;
        face = "X";
    }

    public boolean isRemoved() {
        return removed;
    }
}

然后像这样使用它

Briefcase[] cases = new Briefcase[];
if (!cases[5].isRemoved()) { .... block of code}

可能吗?如果是这样,为我提供了该文档的链接以及其他一些例子,我觉得这很奇怪,同时也很有趣

5 个答案:

答案 0 :(得分:1)

例程isRemoved 存在于Briefcase对象上,在阵列上。要使用否定操作,您必须尝试类似以下内容

for(BriefCase c: cases) {
    if (!c.isRemoved()) {
        // block of code
    }
}

答案 1 :(得分:0)

是的,你可以,但不是代码中显示的数组,而是!case.isRemoved()

这里的要点是!(否定操作符)适用于布尔操作数。

只要操作数表达式解析为布尔,这将有效。

答案 2 :(得分:0)

是的。 boolean是一种原始类型,但我发现使用!并不奇怪。

答案 3 :(得分:0)

我不确定你是否错误或设计了数组中的索引..但这肯定会有效:

if(!cases[i].isRemoved()){ .... block of code}

其中i是索引。

答案 4 :(得分:0)

在这种情况下!否定调用的值isRemoved() 您可以在此处查看运算符列表:http://www.java-tips.org/java-se-tips/java.lang/what-is-java-operator-precedence.html

还有关于你说不能写的答案:

Briefcase[] cases = new Briefcase[];
if (!cases[5].isRemoved()) { .... block of code}

[]和。 ()运算符具有相同的优先级。

[]索引运算符将首先执行,因为该行是从左到右计算的,因此检索一个可以调用isRemoved()方法的公文包实例。