Objetos

Suponhamos que eu tenha a seguinte classe:

public class ListLoader {
    private List<String> list= new ArrayList();
    
    public ListLoader() {  
    }
    
    public getList() {
        //Inflar a variavel list com strings
        return list;
    }
}

public class Foo {
    
    public Foo() {
        ListLoader loader = new ListLoader();
        List<String> list = loader.getList();
    }
}
  1. A variavel list da classe Foo será uma cópia da list da classe ListLoader? Serão o mesmo objeto? Se eu alterar a list da classe Foo a list da classe ListLoader será alterada?

  2. Passar objetos muito grandes pelo return ocasiona perda de performance?

  1. A variavel da classe Foo não será uma copia da variavel da classe ListLoader, elas serão variaveis diferentes porem referenciando um mesmo objeto.
    Logo se vc fizer na classe foo:
list.add(xxx)

Estara inserindo tb na lista referenciada em ListLoader. Mas isso não quer dizer que se vc fizer na classe Foo:

list = new ArrayList();

Ira alterar na classe ListLoader, pois nesse caso vc criou outro objeto e fez a variavel de Foo referenciar outro objeto.

  1. O return vai retornar a referencia para o objeto, então idependente da quantidade de itens de lista, a performasse não vai piorar… até mesmo a lista não contem os objetos em si, apenas referencia para eles.