我有以下代码:
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 Compiler即javac在生成字节码时不执行任何优化.这是真的吗?如果是这样,那么它可以作为中间代码生成器实现,以消除冗余并生成最佳代码吗?
免责声明: 这不是一个真实的例子.这只是这些语言如何运作的理论问题.
在发布和预增量运算符方面,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) 可能重复:
"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
在这种情况下,它正在工作.我的意思是我认为正确的方式.
任何人都可以向我解释原因吗?
我最近在C中编写了很多代码,现在正在转向Java.我目前正在实现一个大型数据结构,并且想知道在调用Java编译器时是否可以打开任何优化标志以提高gcc中的性能.
我习惯了:
gcc -O3 -NDEBUG MyProgram.c
Run Code Online (Sandbox Code Playgroud)
有一个类似的命令javac吗?
我正在使用JDK并且正在运行Ubuntu 10.04.
从下面或这里的程序,为什么最后一次调用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的研究,发现这很令人困惑:
for (int i = 0; i < 10; i = i++) {
System.err.print("hoo... ");
}
Run Code Online (Sandbox Code Playgroud)
这是永无止境的循环!
任何人都有很好的解释为何会发生这样的事情
我对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的值?
我的天真代码是:
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)
这可能是非常简单的事情,但我错过了什么?