是否为此类变量声明提供了优化:
final int secondsInDay = 24 * 60 * 60;
Run Code Online (Sandbox Code Playgroud)
尽管additional_funct根本没有使用,但C++上的这段代码甚至都无法编译:
#include <iostream>
void additional_funct(int num);
void main()
{
std::cout << "just a text";
}
void additional_funct(int num)
{
// For both lines will be shown "divide by zero"
int var = 5 / 0;
int another_var = num + (2 / 0);
}
Run Code Online (Sandbox Code Playgroud)
这证明了C++编译器在运行之前对数字文字表达式进行了优化,以预先计算它们.虽然相同的Java代码将开始运行:
package experimental_main;
public class Experimental_start {
public static void main(String[] args) {
// Will throw ArithmeticException "by zero"
additionalMethod(2);
System.out.println("just a text");
}
static void additionalMethod(int num) {
int var = 5 / 0;
int anotherVar = num + (2 / 0);
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,javac不能用C语言编译代码.但也许它以其他方式提供优化,或者更好地以这种方式声明这样的数字文字:
// 24 * 60 * 60
final int secondsInDay = 86_400;
Run Code Online (Sandbox Code Playgroud)
虽然javac没有做任何重大的优化,但这样的表达式可以在javac级别上进行评估,
如果你反编译表达式,int secondsInDay = 24 * 60 * 60;你会得到类似的东西
public static void main(java.lang.String[]);
descriptor: ([Ljava/lang/String;)V
flags: ACC_PUBLIC, ACC_STATIC
Code:
stack=1, locals=2, args_size=1
0: ldc #2 // int 86400
2: istore_1
3: return
LineNumberTable:
line 7: 0
line 9: 3
Run Code Online (Sandbox Code Playgroud)
并且#2 驻留在恒定池中,
Constant pool:
...
#2 = Integer 86400
Run Code Online (Sandbox Code Playgroud)
86400正如您所见,表达式被评估为其值.
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |