If I could be brave:
This is a pretty old argument, and I felt the same way when I first started Java. In fact, I sorta sometimes feel the same way.
Let's say that I have a method that accepts 3 arguments.
That makes 2^3 possible combinations where combinations are the form:
(value, value, value)
(value, value, null)
(value, null, value)
And here we've run across the first example of how 'default' values in C++ are not precisely the same thing as overloading a method in Java.
How in Java do I distinguish between those last two? I need to supply an overriden version of my method that supports the last two cases above.. but I really can't. Because how do I determine which value is missing from the list?
Overloading is in both C++ and Java, and I think it's slightly different than default values of parameters (at least in this case).
In C++, you just need one method. And in the argument list, wherever the method sees 'null', it substitutes the default value. But in Java, there isn't a similar facility.
For Java, you'd need to check each of arg1, arg2 and arg3 for null, and subsitute a default value in the *body* of the method. I think it's just a matter of style, and yes, simplicity to enable a default value.
Or have I been missing something for a year or so?