Em Java, existem dois tipos básicos na JVM . 1) Tipos primitivos e 2) Tipos de referência. int é um tipo primitivo e Inteiro é um tipo de classe (que é o tipo de tipo de referência).
Valores primitivos não compartilham estado com outros valores primitivos. Uma variável cujo tipo é um tipo primitivo sempre mantém um valor primitivo desse tipo.
int aNumber = 4;
int anotherNum = aNumber;
aNumber += 6;
System.out.println(anotherNum); // Prints 4
Um objeto é uma instância de classe criada dinamicamente ou uma matriz. Os valores de referência (geralmente apenas referências) são ponteiros para esses objetos e uma referência nula especial, que não se refere a nenhum objeto. Pode haver muitas referências ao mesmo objeto.
Integer aNumber = Integer.valueOf(4);
Integer anotherNumber = aNumber; // anotherNumber references the
// same object as aNumber
Também em Java tudo é passado por valor. Com objetos, o valor que é passado é a referência ao objeto. Portanto, outra diferença entre int e Inteiro em java é como eles são transmitidos em chamadas de método. Por exemplo, em
public int add(int a, int b) {
return a + b;
}
final int two = 2;
int sum = add(1, two);
A variável two é passada como o número inteiro primitivo 2. Enquanto que em
public int add(Integer a, Integer b) {
return a.intValue() + b.intValue();
}
final Integer two = Integer.valueOf(2);
int sum = add(Integer.valueOf(1), two);
A variável two é passada como uma referência a um objeto que contém o valor inteiro 2.
@WolfmanDragon: Passar por referência funcionaria assim:
public void increment(int x) {
x = x + 1;
}
int a = 1;
increment(a);
// a is now 2
Quando incremento é chamado, ele passa uma referência (ponteiro) para a variável a . E a função de incremento modifica diretamente a variável a .
E para tipos de objetos, funcionaria da seguinte maneira:
public void increment(Integer x) {
x = Integer.valueOf(x.intValue() + 1);
}
Integer a = Integer.valueOf(1);
increment(a);
// a is now 2
Você vê a diferença agora?