Coming from a C background I have a very basic question: Does pass by value of a larger datatype like a String array invoke something like a copy constructor in java.

So would this code result in creating duplicate list in memory by copying list in list2. 
Thus double memory and cpu utilization.

```
String[] getList() {
    String[] list = new String...
    ...
    return list;
}

String [] list2 = getList();

```

Is my assumption correct? If yes, is there an alternative like passing pointers in C.

PS: if we let garbage collector do the job of cleaning extra memory wont this be another set of cpu utilization of cycles of cleaning the memory which shouldn't have been created at first place.