多选题 Given:
public class ArithmeticResultsOutput {
public static void main(String[] args {
inti1=100; intj1= 200;
if((i1==99) & (--j1==199)) {
System.out.print("Value1: "+(i1+j1)+" ");
} else {
System.out.print("Value2: "+(i1+j1+" ");
}
inti2=100; intj2=200;
if((i2==99) && (--j2==199)) {
System.out.print("Value1: "+(i2+j2+" ");
} else {
System.out.print("Value2: "+(i2+j2+" ");
}
inti3=100; intj3=200;
if((i3==100) | (--j3==200)) {
System.out.print("Value1: "+(i3+j3+" ");
} else {
System.out.print("Value2: "+(i3+j3+" ");
}
inti4=100; intj4=200;
if((i4==100) || (--j4==200)) {
System.out.print("Value1: "+(i4+j4+" ");
} else {
System.out.print("Value2: "+(i4+j4+" ");
}
}
}
What will be printed to standard out?
  • A. Value2: 300 Value2: 300 Value1: 300 Value1: 300
  • B. Value2: 299 Value2: 300 Value1: 299 Value1: 300
  • C. Value1: 299 Value1: 300 Value2: 299 Value2: 300
  • D. Value1: 300 Value1: 299 Value2: 300 Value2: 299
【正确答案】 B
【答案解析】因为Value2: 299 Value2: 300 Value1: 299 Value1: 300将被打印到标准输出。请注意&&和||是短路运算符。所以当条件与(&&)表达式的第一个操作数计算结果为false时,第二个操作数不会计算。当条件或(||)表达式的第一个操作数计算结果为true时,第二个操作数不会计算。因此,对于第二个和第四个if语句,第二个操作数不会计算。所以,前递增运算符从未被执行,并且不会影响j[x]变量的值。A、C和D不是正确答案,理由如正确答案的解释。