int
é um tipo primitivo. Variáveis do tipo int
armazenam o valor binário real do número inteiro que você deseja representar. int.parseInt("1")
não faz sentido porque nãoint
é uma classe e, portanto, não possui métodos.
Integer
é uma classe, não diferente de qualquer outra na linguagem Java. Variáveis do tipo Integer
armazenam referências a Integer
objetos, assim como qualquer outro tipo de referência (objeto). Integer.parseInt("1")
é uma chamada para o método estático parseInt
da classe Integer
(observe que esse método realmente retorna um int
e não um Integer
).
Para ser mais específico, Integer
é uma classe com um único campo do tipo int
. Essa classe é usada onde você precisa int
ser tratado como qualquer outro objeto, como em tipos genéricos ou situações em que você precisa de nulidade.
Observe que todo tipo primitivo em Java possui uma classe de wrapper equivalente :
byte
tem Byte
short
tem Short
int
tem Integer
long
tem Long
boolean
tem Boolean
char
tem Character
float
tem Float
double
tem Double
As classes de wrapper herdam da classe Object e as primitivas não. Portanto, ele pode ser usado em coleções com referência a objeto ou com genéricos.
Desde o java 5, temos autoboxing, e a conversão entre as classes primitiva e wrapper é feita automaticamente. Cuidado, no entanto, pois isso pode introduzir erros sutis e problemas de desempenho; ser explícito sobre conversões nunca é demais.