Linux と Windows の両方で同じバージョン 1.6.0_25 による Java コンパイルがあります。
何らかの理由で、結果のクラス ファイルが異なります。それが正しいか?
Linux と Windows の両方で同じバージョン 1.6.0_25 による Java コンパイルがあります。
何らかの理由で、結果のクラス ファイルが異なります。それが正しいか?
Java コンパイラは決定論的ではないため、同じプラットフォームで複数回コンパイルしたり、異なるプラットフォームでコンパイルしたりすると、同じ .class が生成されない場合があります。なぜそれが決定論的ではないのかを確認するために、Javaコンパイラの内部構造を理解しようとしています。
さらに検索すると、 javacのクロス コンパイル オプションについて学習しながら、より多くの洞察が得られます。
クロスコンパイル オプション
デフォルトでは、クラスは javac が同梱されているプラットフォームのブートストラップおよび拡張クラスに対してコンパイルされます。ただし、javac はクロスコンパイルもサポートしています。クロスコンパイルでは、異なる Java プラットフォーム実装のブートストラップおよび拡張クラスに対してクラスがコンパイルされます。クロスコンパイル時には -bootclasspath と -extdirs を使用することが重要です。以下のクロスコンパイルの例を参照してください。