Apexで使用するAccountやContactなどのsObject型は初期値をセットする方法として『new』 する方法と『null』をセットする方法があります。『new』と『NULL』でどのような違いがでるか確認してみます。
確認用のサンプルコードです。
Apex Class
Visualforce Page
上のようにnullをセットする方法の場合、『account.Id』のようにID項目を使用すると『Attempt to de-reference a null object 』エラーが発生します。
『account.Name』や『account.AccountNumber』などのID以外の項目ではエラーが発生しませんが、『ID』項目ではエラーになってしまいます。
これが『new』する方法の場合はエラーとなりません。
このようにNULLでセットしてしまうと『Attempt to de-reference a null object 』が発生してしまう危険があるので初期値としては適切ではありません。初期値をセットするときは『NULL』ではなく『new』を使用するようにした方がいいと思います。
sObjectの初期値をセットする方法としてクエリの実行結果をセットする方法もあります。
このようにリスト型ではないsObjectにクエリ実行結果をセットするとき、実行結果が0件だと『List has no rows for assignment to SObject 』エラーが発生します。
『Account』ではなく『List
実行結果が0件の場合は『new』した結果を返し、1件存在した場合はリストの0番目を返すようにします。これでList has no rows for assignment to SObject 』エラーを防止することができます。
ID型のNULL判定ですが、Stirng型と同じように『String.isEmpty()』などの関数が利用できます。
ID型には『account.Id = ''』のようなセットの仕方はできませんが、『account.Id == null』と書くよりも読みやすくなると思ってます。