我的教授最近说,尽管x = x + 1
并且x++
显然会给出相同的结果,但是在JVM中实现它们的方式有所不同。这是什么意思?编译器是否不像:嘿,我明白了,x++
所以我将其切换到x = x + 1
并继续吗?
我怀疑在效率方面是否存在差异,但是如果在这些情况下组装会有所不同,我将感到惊讶…
我的教授最近说,尽管x = x + 1和x ++显然会给出相同的结果
我想你的教授也许是故意 的x
-after x = x + 1
和x++
will
的价值是相同的
。只是重新措辞,因为它似乎在解释问题时造成了混乱。
好的,尽管的值x
将相同,但是它们是不同的运算符,并且在字节码中使用不同的JVM指令。x + 1
使用iadd
指令,而x++
使用iinc
指令。尽管这取决于编译器。编译器可以自由地对特定操作使用不同的指令集。我已经针对javac
编译器进行了检查。
对于 eclipse 编译器,来自@Holger的以下注释之一:
我只是用eclipse测试了它,并
iinc
为两个表达式生成了它。所以我发现一个编译器产生相同的指令
您可以使用javap
命令检查字节码。让我们考虑以下类:
class Demo {
public static void main(String[] args) {
int x = 5;
x = x + 1;
System.out.println(x);
x++;
System.out.println(x);
}
}
编译上面的源文件,并运行以下命令:
javap -c Demo
该代码将被编译为以下字节码(仅显示该main
方法):
public static void main(java.lang.String[]);
Code:
0: iconst_5
1: istore_1
2: iload_1
3: iconst_1
4: iadd
5: istore_1
6: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
9: iload_1
10: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
13: iinc 1, 1
16: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
19: iload_1
20: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
23: return
我对Numpy中和之间的区别感到困惑。 例如,我有一个二维数组 当我尝试打印和时,它们都给了我相同的输出: 但是,当我试图通过添加一个维度来广播它时 他们给了我不同的结果。 我试图找出区别,但不能。
将返回来自x(包括)和y(不包括)的流。将返回来自x(含)和y(含)的流。 我期望调用或调用。但是当查看的源代码时,它是这样的: 也有一个非常相似的实现,而不是。唯一的区别是的第三个参数是而不是表示范围已关闭。 然后使用此布尔值初始化类中的字段,并针对它提到以下注释: 如果该范围已关闭且最后一个元素未被遍历,则为1,如果该范围已打开,或该范围已关闭且所有元素都已被遍历,则为0 为什么需要这样的实现
我想知道为什么numpy中有一维的维度数组(length,1),也有一维的维数组(lendth,),没有第二个值。 我经常遇到这种情况,例如在使用< code>np.concatenate()时,这需要预先执行< code>reshape步骤(或者我可以直接使用< code > h stack /< code > v stack )。 我想不出这种行为可取的理由。有人能解释一下吗? 编辑:< br
问题内容: 我曾经听过一位老师丢弃它,此后一直困扰着我。假设我们要检查整数是否大于或等于0。有两种检查方法: 和 据这个老师说会快一些。在这种情况下,它是Java,但据他说,这也适用于C,c ++和其他语言。这句话有什么道理吗? 问题答案: 在现实世界中没有任何区别。 让我们看一下各种编译器为各种目标生成的代码。 我假设一个有符号的int操作(这似乎是OP的意图) 通过调查,我仅限于C和我手边的编
根据这位老师的说法,会比稍微快一点。在本例中,它是Java,但据他说,这也适用于C、C++和其他语言。这种说法有道理吗?
问题内容: 我已经回顾了关于Struts 1 vs 2的几个问题,但是似乎没有一个人以我的观点来回答这个问题。 我将开始着手构建一个新系统,对一个非常老的桌面应用程序进行彻底的重新设计。目标是使其成为基于Web的网站,添加更多功能,使其更易使用等(通常的重新设计原因)。 将要开发该系统的团队主要是Java开发人员,并且在过去5年中广泛地研究了Struts1.x。 该系统打算使用很多年,因此,当一个