请帮助。我正在准备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.我似乎无法弄清楚他们是如何得出答案的。请好好解释一下。
答案 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
。