All variables are copied when passed as argument. (Java has only call-by-value.) Another thing to remember is that you can only refer to objects through references. So what actually happens when you pass an object to a function, is that you pass the reference (by value!).
Other authors may say "primitives are passed by value" and "non primitives are passed by reference", but what they mean is that, you can't pass an object to a function, you can only pass a reference of the object, (and that is passed by value just as any primitive).
From http://stackoverflow.com/questions/40480/is-java-pass-by-reference
Java is always pass-by-value. The difficult thing can be to understand that Java passes objects as references passed by value.
From http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html
Java does manipulate objects by reference, and all object variables are references. However, Java doesn't pass method arguments by reference; it passes them by value.
In Java, there is no counter part to the C++ "reference type" for primitives.