Использовать второй блок. Первый блок, скорее всего, будет оптимизирован ко второму, а второй - более читабельным. Но главная причина заключается в том, что если someObject когда-либо обращается к другим потокам, и если оптимизация каким-то образом отключается, первый блок не будет исключать исключения исключений NullPointerException.
Также: даже без многопоточности, если someObject случайно сделана volatile , оптимизация исчезнет. (Плохо для производительности и, конечно же, очень плохо с несколькими потоками). И, наконец, второй блок будет проще использовать отладчик (не то, что , что когда-либо понадобится.)