VS
Fields (as opposed to variables) can only be initialized in object's constructor or in an initializer. In C++ this should have been done at the time with a constructor like Point::Point(): x(0), y(0) {}. They wanted to remove that boiler plate code, and the entire : .... So zeroing of the object. Mind that for final fields still assigment checking is done.
Local (primitive and pointer) variables in C++ are not initialized at that time, and the compiler can check whether every flow initializes the variable. This is less error prone, than a default initialisation. For instance if a following if-else is expected to initialize the variable with two different values but gets forgotten in one branch. A default, especially null, is rarely a sensible value for a local variable.
The code cost of initializing a local variable with a default value first, is neglectable, and a compiler might even consider not initializing with a default, when the control flow initializes itself.



