相关疑难解决方法(0)

为什么会进入无限循环?

我有以下代码:

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)

java loops increment operators variable-assignment

490
推荐指数
12
解决办法
2万
查看次数

post increment operator java

我无法通过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)

这里的温度在哪里?任何解释都将非常感激."我对此深有所怀疑.;)>>提前致谢.

java post-increment

13
推荐指数
3
解决办法
7322
查看次数