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.
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”
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.
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);
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]);