Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Java básico: faz diferença usar wrappers?

No exemplo dado em aula, o instrutor criou o método da seguinte forma:

public Page<TopicoDto> lista(@RequestParam(required = false) String nomeCurso,
                                         @RequestParam int pagina,
                                         @RequestParam int quantidade)

Eu preferi variar, e chamei o "Integer", no lugar do "int":

public Page<TopicoDto> lista(@RequestParam(required = false) String nomeCurso,
                                         @RequestParam Integer pagina,
                                         @RequestParam Integer quantidade)

Até o momento, o resultado está sendo exatamente o mesmo.

Na "vida real" do mercado, existe alguma preferência entre usar primitivos ou wrappers?

Por baixo dos panos, há alguma diferença conceitual ou de performance entre usar um ou outro?

Existe alguma situação do dia-a-dia em que apenas um deles possa ser usado?

2 respostas
solução!

Oi Fabiano,

Bom, na teoria a preferência seria de sempre utilizar os tipos primitivos, por serem mais "leves" que as classes wrappers. Porém, nem sempre isso será possível ou recomendado, pois existem casos em que se deve utilizar as classes wrapper mesmo.

Por exemplo, em entidades JPA(e no geral também classes DTO) a recomendação é utilizar as classes wrapper, pois os tipos primitivos não aceitam null e com isso se uma coluna no banco de dados permitir null, não será possível enviar esse valor.

Outra coisa a se evitar é "misturar" os 2 tipos, pois o Java faz a conversão automática de primitivos para classe wrapper e vice-versa, sendo que isso acaba gerando um custo extra de performance que não vamos perceber. Por exemplo, observe o código abaixo:

public Integer dobrar(int valor) {
        return efetuarCalculo(valor);
}

public Integer efetuarCalculo(Integer valor) {
        return valor * 2;
}

Repare que o método efetuarCalculo recebe um Integer, mas no método dobrar foi declarado um valor como int e esse valor foi passado como argumento para o método dobrar. Automaticamente o Java vai precisar converter de int para Integer, sendo que isso tem um custo de processamento(meio irrelevante esse custo, mas poderia ser evitado).

Enfim, não tem uma resposta certa para qual tipo utilizar, se primitivo ou classe wrapper, sendo que as considerações que mencionei devem ser observadas em cada situação.

Bons estudos!

Excelente, Rodrigo, muito obrigado!