Everything in Java is pass-by-value, but the Java definition of pass-by-value is probably a bit different than the definition you're used to when it comes to objects.
I understand your confusion, but here's a nice little article covering the nuances of parameter passing in Java. It's going to sound a bit strange because, like I said, it is a bit different than the C world.
About half way through the article there's a section labeled "Pass by Value" that specifically addresses your question, but the whole artcile can be of use.http://java.sun.com/docs/books/tutorial/java/javaOO/arguments.html
After you've read the article, this next part of my post is going to make more sense:
When you pass an object parameter into a method, you're really just passing an int (or maybe a long) that is the memory address to the object. So, when they say everything is pass-by-value, yet you can change an object within a method, they simply mean that you're passing the object reference
by value. When the method exits, the same identifier name will still point to the same object in memory, even though the values of the fields in that object may have been altered by the method.
Welcome to Java, and the games community