我有以下代码:
public class Tests {
public static void main(String[] args) throws Exception {
int x = 0;
while(x<3) {
x = x++;
System.out.println(x);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我们知道他应该只是写x++或者x=x+1,但是x = x++它首先要归于x自身,然后再增加它.为什么x继续0作为价值?
--update
这是字节码:
public class Tests extends java.lang.Object{
public Tests();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]) throws java.lang.Exception;
Code:
0: iconst_0
1: istore_1
2: iload_1
3: iconst_3
4: if_icmpge 22
7: iload_1 …Run Code Online (Sandbox Code Playgroud) 我无法通过joshua bloch的"java puzzlers"来制作以下代码的正面或反面.
public class Test22{
public static void main(String args[]){
int j=0;
for(int i=0;i<100;i++){
j=j++;
}
System.out.println(j); //prints 0
int a=0,b=0;
a=b++;
System.out.println(a);
System.out.println(b); //prints 1
}
}
Run Code Online (Sandbox Code Playgroud)
我不能得到j打印0的部分.据作者说,
j=j++
Run Code Online (Sandbox Code Playgroud)
类似于
temp=j;
j=j+1;
j=temp;
Run Code Online (Sandbox Code Playgroud)
但
a=b++
Run Code Online (Sandbox Code Playgroud)
制作b 1.所以它应该像这样评估,
a=b
b=b+1
Run Code Online (Sandbox Code Playgroud)
遵循相同的逻辑,不应该
j=j++
Run Code Online (Sandbox Code Playgroud)
被评估为,
j=j
j=j+1
Run Code Online (Sandbox Code Playgroud)
这里的温度在哪里?任何解释都将非常感激."我对此深有所怀疑.;)>>提前致谢.