这道Java面试题你做对了吗?

public class qusetion {
	public static void main(String[] args) {
		int i = 1;
		i = i++;
		int j = i++;
		int k = i + ++i * i++;
		System.out.println("i:"+i);
		System.out.println("j:"+j);
		System.out.println("k:"+k);
	}
}

想问问,i、j、k结果分别是多少?

思考一下,答案是:

i:4
j:1
k:11

为什么呢,下面,我们将逐步解析这个过程:

第一句很简单:设置常量 i = 1;

第二句: i = i++;

                                                         

这个过程需要我们理解,从“=”后开始分析,赋值号是最慢处理的

  • 第一步,将 i 的值1放入栈中,此时i->1
  • 第二步:i的值累加1,i->2
  • 第三步:将栈中的值1赋给i,i->1

第三句: j = i++;与第二句同理

                                                    

  • 第一步,将 i 的值1放入栈中,此时i->1
  • 第二步:i的值累加1,i->2
  • 第三步:将栈中的值1赋给【j】,j->1
  • 此时已经可以确定,最终j的结果就是1

第四句:k = i + ++i * i++;

                                    

  • 第一步,将 i 的值1放入栈中,此时i->2
  • 第二步:++i:i的值累加1后,放进栈中,i->3
  • 第三步:i++:i的值放进栈中,i再累加1,i->4。此时i的运算结束,最终i确定为4
  • 栈中的三个数进行运算,结果为3*3+2=11,赋值给k,最终k确定为1

问题解决(撒花)

发布了20 篇原创文章 · 获赞 15 · 访问量 216

猜你喜欢

转载自blog.csdn.net/qq_37414463/article/details/105443896