免责声明: 这不是一个真实的例子.这只是这些语言如何运作的理论问题.
在发布和预增量运算符方面,C/C++,C#和Java之间究竟有什么区别?
这是我用VC++ 10,Java 1.6和C#4获得的
int a = 2;
int b = a++ + a++;
int c = ++a + a++ + a++;
+-----+------+------+----+
| C | C++ | Java | C# |
+-----+-----+------+------+----+
| a | 7 | 7 | 7 | 7 |
+-----+-----+------+------+----+
| b | 4 | 4 | 5 | 5 |
+-----+-----+------+------+----+
| c | 15 | 15 | 16 | 16 |
+-----+-----+------+------+----+
Run Code Online (Sandbox Code Playgroud) 我只是想创建一个小Java-Puzzle,但我很困惑.这个难题的一部分是:
下面这段代码做了什么:
public class test {
public static void main(String[] args) {
int i = 1;
i += ++i + i++ + ++i;
System.out.println("i = " + i);
}
}
Run Code Online (Sandbox Code Playgroud)
它输出9.
我的(至少部分)错误的解释:
我不太确定,但我认为之后的术语i +=会被评估为:

所以
int i = 1;
i += ++i + i++ + ++i;
Run Code Online (Sandbox Code Playgroud)
是相同的
int i = 1;
i += ((++i) + (i++)) + (++i);
Run Code Online (Sandbox Code Playgroud)
这从左到右进行评估(参见前后增量java评估).
第一个++i增量i,以2和回报2.所以你有了:
i = 2;
i += …Run Code Online (Sandbox Code Playgroud) 嗯,这种方法是管理一个接受列表作为参数的转换,但肯定看起来不可扩展.
List<Long> array_list_data= new ArrayList<>();
public void get_Data() {
long0 = array_list_data.get(0);
long1= array_list_data.get(1);
long2= array_list_data.get(2);
}
Run Code Online (Sandbox Code Playgroud)
之后,它将创建一个与long字段不同的类.
但是,如果我们必须将此数据扩展到此列表中的100个参数,该怎么办?
到目前为止我所做的是:
List<Long> array_list_data= new ArrayList<>();
public void get_Data() {
int k = 0;
long0= array_list_data.get(k);
long1= array_list_data.get(k++);
long2= array_list_data.get(k++);
}
Run Code Online (Sandbox Code Playgroud)
为什么递增k不是正确的方法呢?
我很困惑为什么下面的代码中 c = 8 而不是 9。
int a = 5, b = 3;
System.out.println(a + b);
int c = a + b++; //
b++;
System.out.println(a + b);
System.out.format("a=%d, b=%d, c=%d %n", a,b,c);
Run Code Online (Sandbox Code Playgroud) int x = 3;
System.out.println(x++ + ++x + x++); // 13
Run Code Online (Sandbox Code Playgroud)
为什么结果是13?
我的逻辑:
++x 在中心给44 + 4 + 4 = 12 所以结果必须是12.