There seems to be a growing community of people saying that you should never return null and should always use the Null Object Pattern instead. I can see the usefullness of
Returning Optional over Car will not take away the step of checking if car object is actually present or not.
When returning car, you would check if(car != null). Similarly when accessing Optional you SHOULD check if(car.isPresent()) then car.get().
Doing a get() without checking for presence is not acceptable and that can be easily identified and avoided using checkstyle configuration to throw errors.
You might ask the question.. What is any advantage we are getting because of this if we are checking for it's presence in both the patterns?
The answer lies in knowing that you have to do a check, before using it. If you strictly follow the practice of returning Optional wherever it can be nullable across, then you need not check for nulls whereever it's not optional.
It acts as a programmatic way of documenting methods which internally helps enforcing it's check via checkstyles.