String s1="hi"+"Ram"
は定数式であり、コンパイル時に評価されます。しかし、定数 0 による除算も定数式であり、実行時に評価されるのはなぜですか?
String s1="hi"+"Ram"
は定数式であり、コンパイル時に評価されます。しかし、定数 0 による除算も定数式であり、実行時に評価されるのはなぜですか?
定数値は、コンパイラが実行時に行われた場合と同じセマンティクスを維持できる場合、コンパイル時に計算される場合があります。そうでない場合 (たとえば、ゼロ除算の場合)、計算は実行時に延期されます。詳細については、JLS 15.28 を参照してください。
クラスの動作を変更することなく、文字列を最適化できます。これが、コンパイル時に評価できる理由です。
式1.0/0.0
は、評価しない限りエラーではありませんが、コンパイル時に評価することはできません。これは、意味が変わるためです (完全に有効な式からエラーが発生するためです (評価された) 表現. 賢いコンパイラがこれを防ぐことができることに同意しますが、仕様はそれを許可する必要があります.