这是几个月前一个学弟问我的问题,应该是c2级上的一个选择题,还是蛮有意思的,而且网上是没有这个题的答案的,题目是这样的
public class Demo{ public static void fun(a,b,c,d){ System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); } public static void main(String[] args){ int i=1; fun(++1,i,i++,i++); } }
首先是明确2个问题 1.函数的执行顺序为从右到左执行 2.参数计算结果后并不会马上返回计算结果,而是等所有值都计算以后再返回结果。 如第一题: fun(++i, i, i++, i++) //-------------------------------------------计算阶段--------------------------------------------------- 1).i++; (当时i=1) 由于是i++ 所以会将该值保存到内存中 最后会返回该内存中的值 第四个参数d=1 2).i++; (当时i=2) 由于是i++ 所以会将该值保存到内存中 最后会返回该内存中的值 第三个参数c=2 3).i; (当时i=3) 由于是i 所以不会记录到内存中 最后会直接返回i值 4).++i; (当时i=4) 由于是++i 程序会在i的基础上+1 并返回i值 所以不会记录到内存中 最后会直接返回i值 //-------------------------------------------返回计算结果阶段--------------------------------------------------- 5).返回第四个参数 返回1)中内存地址中的值 d=1 6).返回第三个参数 返回2)中内存地址中的值 c=2 7).返回第二个参数 返回i值 b=4 8).返回第一个参数 返回i值 a=4
解题思路如下:
第二题: fun(++i, i++, i++, ++i); //-------------------------------------------计算阶段--------------------------------------------------- 1).++i; (当时i=2) 由于是++i 程序会在i的基础上+1 并返回i值 所以不会记录到内存中 最后会直接返回i值 2).i++; (当时i=2) 由于是i++ 所以会将该值保存到内存中 最后会返回该内存中的值 第三个参数c=2 3).i++; (当时i=3) 由于是i++ 所以会将该值保存到内存中 最后会返回该内存中的值 第三个参数b=3 4).++i; (当时i=5) 由于是++i 程序会在i的基础上+1 并返回i值 所以不会记录到内存中 最后会直接返回i值 //-------------------------------------------返回计算结果阶段--------------------------------------------------- 5).返回第四个参数 返回i值 d=5 6).返回第三个参数 返回2)中内存地址中的值 c=2 7).返回第二个参数 返回3)中内存地址中的值 b=3 8).返回第一个参数 返回i值 a=5
原文:http://blog.csdn.net/u014677625/article/details/42803371