相关疑难解决方法(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万
查看次数

105
推荐指数
7
解决办法
20万
查看次数

Java编译器优化

最近,我正在读这篇文章.

根据那篇文章,Java Compiler即javac在生成字节码时不执行任何优化.这是真的吗?如果是这样,那么它可以作为中间代码生成器实现,以消除冗余并生成最佳代码吗?

java optimization javac

62
推荐指数
4
解决办法
2万
查看次数

C,C++,Java和C#中的前后增量运算符行为

免责声明: 这不是一个真实的例子.这只是这些语言如何运作的理论问题.

在发布和预增量运算符方面,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)

c c# c++ java

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

如果y = 1且y = y ++,为什么当我打印y时值为1?

可能重复:
"x = x ++"后的x是什么?

int y = 1;
y = y++;
System.out.println("Value Of y :"+y);
Run Code Online (Sandbox Code Playgroud)

输出值为y:1

我正在递增y并再次将其分配给"y".因此,首先使用该值,然后递增该值.因此它分配值并且它会增加.所以我认为输出将是2.

int y = 1;
int x = y++;
System.out.println("Value Of x :"+x);
System.out.println("Value Of y :"+y);
Run Code Online (Sandbox Code Playgroud)

输出为:
值x:1
值y:2

在这种情况下,它正在工作.我的意思是我认为正确的方式.

任何人都可以向我解释原因吗?

java

37
推荐指数
0
解决办法
4136
查看次数

javac优化标志

我最近在C中编写了很多代码,现在正在转向Java.我目前正在实现一个大型数据结构,并且想知道在调用Java编译器时是否可以打开任何优化标志以提高gcc中的性能.

我习惯了:

gcc -O3 -NDEBUG MyProgram.c
Run Code Online (Sandbox Code Playgroud)

有一个类似的命令javac吗?

我正在使用JDK并且正在运行Ubuntu 10.04.

java compiler-construction optimization javac

31
推荐指数
3
解决办法
3万
查看次数

Java:增量/减量运算符的前缀/后缀?

从下面或这里的程序,为什么最后一次调用System.out.println(i)打印值7

class PrePostDemo {
     public static void main(String[] args){
          int i = 3;
          i++;
          System.out.println(i);    // "4"
          ++i;             
          System.out.println(i);    // "5"
          System.out.println(++i);  // "6"
          System.out.println(i++);  // "6"
          System.out.println(i);    // "7"
     }
}
Run Code Online (Sandbox Code Playgroud)

java pre-increment post-increment

29
推荐指数
3
解决办法
9万
查看次数

后增量运算符不在for循环中递增

我正在做一些关于Java的研究,发现这很令人困惑:

for (int i = 0; i < 10; i = i++) {
  System.err.print("hoo... ");
}
Run Code Online (Sandbox Code Playgroud)

这是永无止境的循环!

任何人都有很好的解释为何会发生这样的事情

java loops for-loop infinite-loop post-increment

21
推荐指数
2
解决办法
2066
查看次数

Java增量和赋值运算符

我对post ++和pre ++运算符感到困惑,例如在下面的代码中

int x = 10;
x = x++;

sysout(x);
Run Code Online (Sandbox Code Playgroud)

会打印10?

它打印10,但我预计它应该打印11

但是当我这样做的时候

x = ++x; instead of x = x++;
Run Code Online (Sandbox Code Playgroud)

它将按照我的预期打印11个,那么为什么x = x ++; 不改变x的值?

java increment pre-increment post-increment

14
推荐指数
2
解决办法
6577
查看次数

我使用IntStream和forEach创建整数列表的方法有什么问题?

我的天真代码是:

class ${
    public static void main(String[] _) {
        final List<Integer> ints = new ArrayList<>();
        IntStream.iterate(0, i -> i++).limit(5).forEach(val -> ints.add(val));
        System.out.println(ints);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的期望是在控制台中看到以下内容:

[0, 1, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)

但实际是:

[0, 0, 0, 0, 0]
Run Code Online (Sandbox Code Playgroud)

这可能是非常简单的事情,但我错过了什么?

java java-8 java-stream

8
推荐指数
3
解决办法
684
查看次数