これは、ローカル変数の状態がそのスコープ内で制御されるためです
// method/loop/if/try-catch etc...
{
Date d; // if it's not intialised in this scope then its not intialised anywhere
}
フィールドの場合はそうではありません
class Foo{
Date d; // it could be intialised anywhere, so its out of control and java will set to null for you
}
さて、なぜ変数をnullに設定してすぐに使用するのがいいのでしょうか?たぶんそれは歴史的な間違いであり、時には恐ろしい間違いにつながります
{
Date d = null;
try{
}catch{ // hide it here
}
return d;
}
では、セマンティックの違いは何ですか?
Date d;
Date
ただし、typeのオブジェクトを指す参照を保持できる変数を宣言するだけです
Date d= null;
まったく同じことを行いますが、参照は今回はnullを指します。nullは参照のように、ネイティブポインタのスペースを取ります。32ビットマシンでは4バイト、64ビットマシンでは8バイトです