C# makes distinction of those two. Does java do the same or differently?
Actually, everything in Java is passed by value, references being a special type of value, just like pointers are values in C. More about the semantics here:
http://javadude.com/articles/passbyvalue.htm
C# on the other hand, does have real references a la C++, which are unrelated to reference values... Can it get any more confusing than that?