在Java中使用三元运算符应用增量

时间:2012-11-02 14:25:06

标签: java

可以在Java中使用三元运算符来应用增量吗?

例如,我想在没有“if”语句的情况下进行此操作,不是因为它更具可读性或更短,只是我想知道。

if(recordExists(recordId)){
   numberofRecords++;
}

3 个答案:

答案 0 :(得分:15)

  

可以在Java中使用三元运算符来应用增量吗?

您可以改为使用添加。

numberOfRecords += recordExists(recordId) ? 1 : 0;

恕我直言,这没有副作用。

答案 1 :(得分:6)

  

可以在Java中使用三元运算符来应用增量吗?

可以写:

// Ick, ick, ick.
int ignored = recordExists() ? numberOfRecords++ : 0;

或者进行无操作方法调用:

// Ick, ick, ick.
Math.abs(recordExists() ? numberOfRecords++ : 0);

我会强烈阻止你这样做。这是对条件运算符的滥用。只需使用if声明。

条件运算符的目的是创建一个表达式,其值取决于条件。

if语句的目的是根据条件执行一些语句

引用Eric Lippert's tangentially-related C# blog post

  

表达式的目的是计算一个值,而不是引起副作用。声明的目的是产生副作用。

编辑:鉴于对这个答案的有效性存在疑问:

public class Test {
    public static void main(String[] args) {
        boolean condition = true;
        int count = 0;
        int ignored = condition ? count++ : 0;
        System.out.println("After first check: " + count);
        Math.abs(condition ? count++ : 0);
        System.out.println("After second check: " + count);
    }
}

输出:

After first check: 1
After second check: 2

答案 2 :(得分:0)

请记住,如果尝试在三元运算符中使用增量,它们可能会做一些奇怪的事情。我相信这个词是“短路”,其结果非常违反直觉。

最好避免!

例如,注意以下内容:

public class Strange {
    public static void main(String[] args) {
        int x = 1;
        x = x > 0 ? x++ : x--;
        System.out.println("x= " + x); // x is 1, both the increment and decrement never happen.

        int y = 5;
        y = y < 0 ? y++ : y--;
        System.out.println("y= " + y); // y is 5, both the increment and the decrement never happens.

        // Yet, in this case:

        int a = 1;
        int b = 2;

        a = a > 0 ? b++ : a--;
        System.out.println("a= " + a + " b= " +b); // a = 2, b = 3;
        // in this case a takes on the value of b, and then b IS incremented, but a is never decremented.

        int c = 5;
        int d = 1;
        int e = 0;

        c = c < 10 ? d++ : e--;
        System.out.println("c= " + c + " d= " + d + " e= " + e); // c = 1, but d = 2, and e = 0. 
        // c is assigned to d, then d in INCREMENTED, then the expression stops before evaluating the decrement of e!

        c = c > 10 ? d++ : e--;
        System.out.println("c= " + c + " d= " + d + " e= " + e);
        // c = 0, d = 1, e = -1

    }
}