[Dúvida]Referência em Java

Olá pessoal, me surgiu uma dúvida básica sobre esse exemplo:

int a = 1; int b = a; a++; System.out.println(b);

O resultado esperado por mim seria 2 visto que a variavel b estaria usando como referencia ou apontando para a variavel a , porém o resultado foi 1.
Agora estou querendo saber por que ela fez isso e como faço para usar um tipo de ponteiro*/referencia& do C++ em Java.

Bom…
O b está recebendo o valor de a, antes dele ser incrementado…

Você teria recebido o valor 2, se movesse o b para após o a ser incrementado
Ex.:

int a = 1; a++; int b = a; System.out.println(b);

Sim, mas não tem um jeito de declarar esse int b = a; uma unica vez e de acordo com as mudanças de “a” ele imprimir normalmente, tipo esse código de C++ :

int a = 1; int& b = a; a++; std::cout << a << " e " << b << std::endl;

Nesse código a variavel “b” pega a referência/endereço de “a” e imprime “2 e 2”

boa pergunta…

se ao invés de um int, vc estivesse utilizando um objeto de uma classe que vc criou (ou uma outra classe não primitiva), qualquer alteracao em a iria refletir em b.

agora com tipos primitivos eu nao sei mesmo…

Não existe ponteiros em Java. Nem variáveis de referências para tipos primitivos.

Para tipos não primitivos, todas as variáveis são referências.

No Java também não existe passagem de parâmetro por referência, apenas por valor.

Mas tipo…
qual é a utilidade de criar uma variável b que terá sempre o mesmo valor de a?
só vai ser um dado duplicado não?

Tudo que vc fizer em a, vai refletir em b
Então para que serve isso? (basta explicar +/-)

A maior vantagem disso é na passagem de parâmetros. Considere uma função que precise retornar 2 valores.

Se isso fosse possível, vc poderia criar uma função assim:

public void obterLimites(int[] array, int& minimo, int& maximo) { int minino = array[0]; int maximo = array[0]; for (int numero : array) { minimo = Math.min(minimo, numero); maximo = Math.min(maximo, numero); } }

E simplesmente usa-la assim:

int min, max; int valores = {10,2,5,10,11,15,29,100,-50}; obterLimites(valores, min, max); System.out.println("O menor valor é: " + min); System.out.println("O maior valor é: " + max);

Para fazer algo similar em Java, só com objetos.

Amigo acredito que a única forma de você fazer isso seria usando arrays, tendo em vista que somente com o uso de referencia você chegaria ao seu resultado. Como cada elemento de um Array é um Objeto e o Array por se só também é um objeto, então acho que isso funciona:

        Integer[] a = {1};
        Integer[] b = a;
        a[0]++;
        System.out.print(b[0]);