Androidソースコードでは、4つの変数を
protected int mPaddingRight = 0;
protected int mPaddingLeft = 0;
protected int mPaddingTop;
protected int mPaddingBottom;
Javaでは、変数を0に初期化するかどうかの違いは何ですか?一部のコンパイラでは、フィールドを初期化しないと比較できないことを理解していません。しかし、ここではそうではありません。これは最適化に関係していますか?または、これは単に一貫性のない/悪いコーディング慣行ですか?
Javaプリミティブデータ型turorial に従って、すべてのプリミティブデータ型にはデフォルト値があります。したがって、初期化は暗黙的です。良い習慣:予期しない動作を防ぐために、使用する前に値を初期化します。
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\u0000'
String (or any object) null
boolean false
他の人は、クラスのプロパティがデフォルト値に初期化されることを指摘しています。
したがって、セマンティック上、明示的に0に設定しても(または、オブジェクトプロパティの場合はnullに設定しても)違いはありません。
ただし、実際にはバイトコードレベルで違いがある場合があります。暗黙的にデフォルト値に設定されているクラスプロパティと暗黙的に設定されているクラスプロパティのみが異なるコードが、まったく同じバイトコードを持つという保証はありません。
旧バージョンのJDKでは、明示的な初期化のために大きく長いコードを生成していましたが、javap
で簡単に確認できました。 (この事実は時折インタビューの質問の基礎として使用されていました。)これがまだ当てはまるかどうかを確認するために、JDKの最新バージョンをチェックしていません。