java – 作业给出了意想不到的答案
今天我遇到了以下问题,我似乎找不到一个解决方案:
int i,j,k; i = j = k = 3; i = k++; 所以对我而言,变量’i’现在必须具有值4,因为我们将’k’的增量分配给它似乎是合乎逻辑的.在多项选择测试中,第三行之后的正确值代替: k = 4 和 i != 4 由于我们将k的增量分配给i,所以给定的解决方案与我预期的完全相反. 解决方法
首先,如JB Nizet所说,不要这样做.偶尔我会在另一个表达式中使用后缀增量,对于像array [index] = value这样的东西,但是为了清楚起见,我经常会把它分成两个语句.
我不会回答这个问题,但所有答案(在发布时)都犯同样的错误:这不是时间问题;这是表达式k的值的问题. 对i的分配发生在k的增量之后,但是表达式k的值是k的原始值,而不是递增的值. 所以这段代码: i = k++; 相当于: int tmp = k; k++; i = tmp; 从section 15.14.2 of the JLS(重点):
这个差异是非常重要的,可以很容易地看出,如果不使用postfix表达式作为一个赋值,你调用一个方法: public class Test { private static int k = 0; public static void main(String[] args) throws Exception { foo(k++); } private static void foo(int x) { System.out.println("Value of parameter: " + x); System.out.println("Value of k: " + k); } } 结果是: Value of parameter: 0 Value of k: 1 可以看出,在我们称之为方法的时候,k已经增加了,但是传递给该方法的值仍然是原始值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |