You can cast null to any source type without preparing any exception.
The println method does not throw the null pointer because it first checks whether the object is null or not. If null before it simply prints the string "null". Otherwise, it will call the toString purpose of that object.
Adding more further details: Inside print methods call String.valueOf(object) method on the input object. And in the valueOf method, this check helps to bypass null pointer exception:
return (obj == null) ? "null" : obj.toString();
For the rest of your embarrassing, calling any system on a null object should throw a null pointer exception, if not a special case.