编译器是否删除了不必要的括号

4 java compiler-construction

例如,如果我在Eclipse中用Java编译它

intvar = (int)(((var1 * var3))*(7));
Run Code Online (Sandbox Code Playgroud)

将编译器清理干净

intvar = (int) var1 * var3 * 7;
Run Code Online (Sandbox Code Playgroud)

然后编译器会做它的机器代码和东西.

或者,我是否必须对编译器执行一些特殊操作以使其优化代码?

此外,这适用于所有其他编译的语言吗?

Ale*_*exR 5

编译器将java代码转换为字节代码.字节代码根本没有括号.它适用于堆栈.


ars*_*jii 5

检查字节码javap -c:

intvar = (int)(((var1 * var3))*(7));
Run Code Online (Sandbox Code Playgroud)

变为:

   4: iload_1       
   5: iload_2       
   6: imul          
   7: bipush        7
   9: imul          
  10: istore_3      
Run Code Online (Sandbox Code Playgroud)

和

intvar = (int) var1 * var3 * 7;
Run Code Online (Sandbox Code Playgroud)

变为:

   4: iload_1       
   5: iload_2       
   6: imul          
   7: bipush        7
   9: imul          
  10: istore_3      
Run Code Online (Sandbox Code Playgroud)

即完全相同.