I'm not sure I'd agree with that. Pass by value means you make a copy of something. Otherwise with your description, passing a const char* in C/C++ is passing by value since you can't modify the char* string (without a cast at least).
In Java, it helps to throw away the word 'reference' and replace it with 'pointer', since that's really what it is. If you pass a pointer to an object in Java, you can modify that object with the objects set() functions, but obviously you can't reassign it with the = sign, since that would only change the local pointer (reference), but not the pointer outside the function.