B
Dürfte mit equals auch nicht funktionieren, der logische Operator stimmt nämlich nicht. a || b ist bekanntlich dann wahr, wenn a oder b wahr sind. Im Umkehrschluss ist a || b also genau dann falsch, wenn sowohl a als auch b falsch sind. Gucken wir uns das mal an: a ist hostname ungleich Leerstring. Diese Bedingung ist nur dann falsch, wenn a der Leerstring ist. In dem Moment ist aber automatisch die zweite Bedingung, a != null, wahr. Wenn also das Nichtzutreffen der ersten Bedingung das Zutreffen der zweiten Bedingung impliziert, ist a || b immer wahr.
Der && Operator würde sich dagegen anbieten. Ausserdem sollte die Reihenfolge vertauscht werden, da bei hostname == null sonst beim equals-Aufruf eine NullPointerException geworfen wird.