|
|
1
44
JLS将指定语句所需的行为。但是,如何实现它们是编译器和JVM的实现细节。 在实践中,任何值得一试的编译器都应该为这些语句发出相同的字节码。即使没有,JVM也会对它们进行适当的优化。
另外,回答这个问题的一个更好的方法是检查你自己,使用
更新: 回答你关于“学术”问题的问题。如上所述,JLS只关注行为。标准中没有实际规定应该如何实现的内容(好吧,JVM提供了很多指导)。 只要编译器保持相同的行为,编译器就可以自由地实现不同的行为,可能具有不同的运行时性能。 |
|
2
12
编译器应该在内部解析为相同的代码,因此没有区别。 |
|
|
3
0
尝试 decompiling the byte code 看看代码看起来有多不同。我猜编译将以几乎相同的方式解决它们,任何细微的差异都将导致可忽略的性能差异。 |
|
|
4
0
好的,更完整的答案是: 如果任何编译器为这些变化生成不同的字节码,我会非常惊讶。对于任何感兴趣的人来说,使用拆卸器检查应该足够容易。 考虑到这两个表达式(很可能)都编译到同一个字节码,我希望在大小或性能上没有差别。 |
|
|
5
0
捷豹路虎说
在非案例和比较对象案例中,需要对表达式进行评估,然后将其与true进行比较。如果您检查的是一个值,而不是对它执行一个运算符,那么当表达式评估变成一个非操作时,可能会有一个理论上的性能优势。 但在本例中,我希望JIT为两个表达式生成相同的字节码。 |
|
|
6
0
在这两个结果中生成的字节码应该没有区别,除非它是为一个资源非常有限的设备创建代码(在这种情况下,你不应该在爪哇写),否则差异是微不足道的,你应该决定写这两个代码的哪一个方法是一个更明显的解决方案。 |
|
|
7
0
思考微观优化几乎在任何情况下都是浪费时间,并导致以错误的方式思考… |
|
|
8
0
我问了一个类似的问题关于C++/VS2008。 Would VS2008 c++ compiler optimize the following if statement? 在C++中避免V= V==TyPOS,您倾向于写
等。 在您习惯之前,它的可读性稍差。 |
|
|
tomm · 谷歌表格-将两列相乘,复制第三列 4 年前 |
|
|
ziemsterr · 无法在SQL SELECT语句中找出此语法错误 4 年前 |
|
|
Andrés BolÃvar · AJAX请求未收到我想要的属性 4 年前 |
|
|
clarkk · 当声明向量时,(1)是什么意思? 4 年前 |
|
|
Mike C. · Bash错误[:检查文件是否存在时缺少“]” 4 年前 |
|
|
michael · 错误的脚本和语法问题 4 年前 |