Java面试 笔试题之i++问题

注:以下代码除特殊说明外,均使用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
Java面试 笔试题之i++问题_第1张图片
所以结果是j=0.
答案:A

再来看第二道选择题

2.以下代码的执行结果是多少?

public void test2() {
        int i=0;
        i=i++ + ++i;
        System.out.println("i="+i);
    }

刚刚做完第一题,可能有的同学认为答案是1,因为Java使用中间缓存变量的机制呀。别着急,我们来仔细分析一下这道题
Java面试 笔试题之i++问题_第2张图片
所以说,执行到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
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++的时候尤其要注意。

你可能感兴趣的:(Java,Java面试)