三元运算符是如何工作的

How does the ternary operator work

我不明白这段代码;

有没有人写得好,我也能看懂。

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

这是一个三元运算符,叫做条件运算符。也可以这样写:

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

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

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

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

意思是:(a < b)的值,如果为真,则min的值为a,否则,min的值为[=14] =]。它可以这样与 if-else 语句相关: If (a < b) is true: min = a;否则:最小值为 b.

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

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

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

PS:

显然,在许多涉及根据 two-way 条件为变量赋值的实际情况中,这可能是 if-statement 的微妙替代。 this post 中关于 "more efficient" 方法的争论很大,但我个人更喜欢使用三元运算符,因为它的语法长度和可读性相对较短。

希望对您有所帮助.. 编码愉快!