三元运算符如何工作

时间:2018-03-22 10:59:16

标签: java ternary-operator

我不明白这段代码;

有人可以写得正确,所以我也可以理解。

public void deleteStudentsPersistence(Student student) {
        em.remove(em.contains(student) ? student : em.merge(student));
    } 

2 个答案:

答案 0 :(得分:4)

这是一个三元运算符,称为条件运算符。它也可以这样写:

public void deleteStudentsPersistence(Student student) {
        if (em.contains(student)){
        em.remove(student);
        } else{
        em.remove(em.merge(student));
        }
    } 

基本上,它会在删除之前检查em是否包含学生,否则将其合并

答案 1 :(得分:4)

您在那里使用的运算符称为三元运算符,它的工作方式与if-else语句的工作方式几乎相同。请考虑以下声明:

int min = (a < b) ? a : b;

这意味着:评估(a < b)的值,如果是,则min的值为a,否则,min的值为b 。它可以通过这种方式与if-else语句相关:如果(a&lt; b)为真:min = a;否则:min是b。

现在回到你的问题....

em.remove(em.contains(student) ? student : em.merge(student));

这意味着如果em.contains(student)为真,则执行em.remove(student),但如果错误,则执行em.remove(em.merge(student))

<强> PS:

显然,在许多实际情况中,涉及根据双向条件给变量赋值,这可能是if语句的微妙替代。关于“更有效”的方法有很好的论据,如this post所示,但我个人更喜欢使用三元运算符,因为它的语法长度和可读性相对较短。

我希望这有帮助..快乐编码!