質問: プリミティブの明示的な初期化 Javaプリミティブにはデフォルトの初期化値があることを理解しています。たとえば `int` の場合は `0` です。 私の研究から、私はこれらの価値に頼るべきではないと思われます。私はいつも明示的な初期化を提供するべきですか?もしそうなら、どこで? 私のプログラムの一部です: ``` public class Calculator { // Initialize value where it's declared? private int value; public Calculator() { //Initialize value in constructor? } public void add(int other) { value += other; } } ```
回答: デフォルト値でJVMプリミティブの初期化を明確に信頼できます。 ところで、明示的な初期化は、この場合は役に立たないバイトコードに変換されます。 このクラスがあるとします: ``` public class PrimitiveInitialization { int i = 0; int j; } ``` 対応するバイトコードは ``` class PrimitiveInitialization { I i I j public ()V L0 LINENUMBER 8 L0 ALOAD 0 INVOKESPECIAL java/lang/Object. ()V L1 LINENUMBER 10 L1 ALOAD 0 ICONST_0 PUTFIELD PrimitiveInitialization.i : I RETURN L2 LOCALVARIABLE this LPrimitiveInitialization; L0 L2 0 MAXSTACK = 2 MAXLOCALS = 1 } ``` 明示的な初期化では、変数 `i` にバイトコード操作がほとんど追加されないことがわかります。 つまり、JITは実行時にこの種のバイトコードをおそらく最適化できるため、*常にコードの可読性を優先する必要があります*。