@magicalclick: Basically your first point was entirely correct. Java completely lacks the ability to pass a reference to a value or references, it can only pass references to objects.
Nowhere in Java can you pass a parameter, assign it and have that assignment be anything but local to the method.
You can't in C# either (without the ref or out keywords) because even though it supports operator overloading, to prevent exactly this problem, it does not allow you to override the assignment operator.
C++ is a different kettle of fish because it makes it much more explicit what is a reference or pointer and what is not.