title: Java Functions Passing & Returning Complex Data Types
body: <p>I'm in the process of learning Java and can't help but wonder how exactly Java passes function parameters and return values. I've done some search and found that Java only passes Objects by value. However, some people challenge this; they claim that when handling Complex Data Types (not Primitive like e.g. <code>int</code>) it only passes a pointer.</p>
  
  <p>Does this mean that whatever changes are made to the local object affect the original one? Is there any way to pass "PURELY" by value (i.e. make a hard copy of an Object)?</p>
  
  <p>Furthermore, what is true about the return value? For example, we use accessors (or getter functions - I'm not completely sure how they are called) to protect the private Attributes of an ADT from being changed to "illegal" values. If Java passes the Pointer, then whatever changes I make to the returned Object of an Accessor Function also affect the actual Attribute, if it isn't a Primitive Data Type, don't they?</p>
  
  <p>Could anybody please help me clarify these concepts?
  Thank you in Advance! :D</p>