な変数宣言のために提供最適化があります:javacは固定式をあらかじめ計算していますか?
final int secondsInDay = 24 * 60 * 60;
その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);
}
これは、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