As far as questions 1 and 2 go, try not to think of it in terms of pass by value or pass by reference. It is quite different than C++. What I did basically is forget all that when dealing with Java, and worry about what it really is doing, not what to call it. As far as what it really is doing, you are correct in your previous statements. Java is built slightly on the C++ syntax, but it is very different. As long as you know how it works, don't worry about whether it's by value or by reference (this has been a large and heated discussion between many Java programmers for a while now, you'll get a different answer every time you ask the question).
Same thing with the question of pointers. In Java as you know, they're called references. Whether or not they hold a pointer to the actual object is irrelevant, we know how it works, we know how to use it, that's all that matters. It's a reference, not a pointer, very different. If you want to think in C++ terms, then think of the interface and the implementation of a method or class. If you want to know how to use the method or class, you look at the interface, you need not look at the implementation because you shouldn't be concerned about how the method is doing what it is doing, just know that it is doing it correctly and that you are using it correctly. And I only use C++ as a point of view because that's where a lot of people migrate to Java from (myself included).
I've rambled enough, you get my point.
------------------
Michael J Bruesch
Codito, ergo sum...
I code, therefore I am. My Java Games, I'm quite proud