注:以下代码除特殊说明外,均使用Java语言编写,编译器为eclipse,jdk版本为1.8
1.下面程序的输出结果是()
public void test1() {
int j=0;
for(int i=0;i<100;i++) {
j=j++;
}
System.out.println("j="+j);
}
A.0 B.99 C.100 D.101
所以结果是j=0.
答案:A
再来看第二道选择题
2.以下代码的执行结果是多少?
public void test2() {
int i=0;
i=i++ + ++i;
System.out.println("i="+i);
}
刚刚做完第一题,可能有的同学认为答案是1,因为Java使用中间缓存变量的机制呀。别着急,我们来仔细分析一下这道题
所以说,执行到i++时,i的值并不是立即进行自加1的,Java虚拟机会先将i++操作压入栈,执行下一个操作(可以是赋值操作也可以是运算等其他操作),再将i++操作从栈弹出执行,所以
答案是:i=2
3.以下代码的执行结果是多少?
public void test5() {
int j=0;
j = ++j + j++ + j++ + j++;
System.out.println("i="+j);
}
这道题,相信很多同学都会做了,我们来看解析
所以答案是:i=7
最后来看一道综合题
4.下面代码块1中的横线填入**__**可使输出的值与代码块2的输出值相同?
A.i B.i++ C.++i D.不加任何值
//代码块1:Java
public void test4() {
int i=0;
i=i++ + __;
System.out.println("i="+i);
}
/*代码块2:C语言*/
#include<stdio.h>
main()
{
int i=0;
i=i++;
printf("i=%d/n",i);
}
答案是:A或B
要做对这道题,首先要明白i=i++操作在C语言里的结果是多少,是0,等效于:i=i,i++。最后输出的是自加1的结果也就是输出i=1(不采用中间缓存变量的机制)
所以在java中使用i++的时候尤其要注意。