有沒有提供這樣的變量聲明優化:javac是否預先計算固定表達式?
final int secondsInDay = 24 * 60 * 60;
在C++這段代碼甚至不會編譯儘管additional_funct
是根本不使用:
#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);
}
這證明了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);
}
}
我明白javac
不會編譯在C語言代碼的含義。但也許它在一些其他的方式提供優化或它能夠更好地以這種方式聲明這樣的數字文字:
// 24 * 60 * 60
final int secondsInDay = 86_400;
看一看:'javap -c YourClass.class'。但更具描述性的方法是使用'TimeUnit.DAYS.toSeconds(1)'。 –
C++代碼*將*編譯並運行(如果您更改'main'的簽名),[但它會給出警告](http://ideone.com/DxgXMh)。 –
此代碼僅供參考。但關於'secondsInDay'聲明:對我來說很遺憾=)我知道'TimeUnit',但沒有考慮以這種方式使用它。 – Cryptor