Java:涉及方法时的运算符优先级

时间:2015-03-07 12:05:33

标签: java

请帮助。我正在准备Java 7 Programmer 1考试,并在其中一个enthuware测试中遇到了这个问题。

问题:

考虑以下方法:

static int mx(int s) { for(int i=0;i<3;i++) { s=s+i; } return s; }

以下代码段:

`   int s=5;
    s += s + mx(s) + ++s;
    System.out.println(s);` 

它会打印什么?

结束问题

根据运算符优先级的规则,我首先评估++ s为s得到6的值,然后在mx方法中使用6得到值8.接下来我加了6 + 8 + 6 = 20。然后最终执行赋值操作为s = 6 + 20 = 26。

正确答案是24.我似乎无法弄清楚他们是如何得出答案的。请好好解释一下。

2 个答案:

答案 0 :(得分:5)

您不应该从++s开始,因为评估是从左到右。

s += s + mx(s) + ++s;

相同
s = 5 + 5 + mx (5) + 6;

s = 5 + 5 + 8 + 6 = 24

答案 1 :(得分:0)

s的值++s不会改变,因为表达式的评估是从左到右。

您可以通过修改代码来检查:

public static int  mx(int s){
    System.out.println(s);
    for(int i=0;i<3;i++){
        s=s+i;
    }
    return s;
}

public static void main(String[] args){
    int s=5;
    s += s+mx(s)+ ++s;
    System.out.println(s);
}

mx(int s)中的print语句会打印出s的值,表明它仍然是5


另外,如果mx(int s)已通过值6,则会返回9而不是8