Well, in some cases, System.out.println may throw a NullPointerException making you think that this works.
If you have a complex object in which you created your own toString() method, there is a chance of an error in this method. You can accidentally or intentionally encode this so that NPE does occur. The object itself is not null, however some of the attributes inside may be empty.
Such coding is likely to be discouraged, although it violates the contract, as others have pointed out. The desired behavior should represent the null object as null , and not preempt the NPE.
source share