Passed by value-result is aliases, result will be same with pass by reference
Person p, q;
  p = new Person();
  q = p;
  // now p.name and q.name are aliases (they both refer to the same location)
  // however, p and q are not aliases (they refer to different locations)
pictorially:
                   +--------------------------------+
                   |                                |
                   |       +---------------------+  |
                   |       |                     |  |
                   |       |                     v  v
           ---     |       |                    +---+
        p: |-|-----+       |              name: |   |  a Person object
           ---             |                    |---|
                           |               age: |   |
           ---             |                    +---+
        q: |-|-------------+
           ---
