Ten kod Java:
public class XYZ {
public static void main(){
int toyNumber = 5;
XYZ temp = new XYZ();
temp.play(toyNumber);
System.out.println("Toy number in main " + toyNumber);
}
void play(int toyNumber){
System.out.println("Toy number in play " + toyNumber);
toyNumber++;
System.out.println("Toy number in play after increement " + toyNumber);
}
}
wyświetli to:
Numer zabawki w grze 5 Numer zabawki w grze po zwiększeniu 6 Numer zabawki w głównym 5
W C ++ mogę przekazać toyNumber
zmienną jako przekaz przez odniesienie, aby uniknąć cieniowania, tj. Tworzenia kopii tej samej zmiennej, co poniżej:
void main(){
int toyNumber = 5;
play(toyNumber);
cout << "Toy number in main " << toyNumber << endl;
}
void play(int &toyNumber){
cout << "Toy number in play " << toyNumber << endl;
toyNumber++;
cout << "Toy number in play after increement " << toyNumber << endl;
}
a wynik C ++ będzie taki:
Numer zabawki w grze 5 Numer zabawki w grze po zwiększeniu 6 Numer zabawki w głównym 6
Moje pytanie brzmi: Jaki jest równoważny kod w Javie, który daje takie same dane wyjściowe jak kod C ++, biorąc pod uwagę, że Java jest przekazywana przez wartość, a nie przez odniesienie ?
toyNumber
zmienna zadeklarowana w main
metodzie nie znajduje się w zakresie w play
metodzie. Cieniowanie w C ++ i Javie ma miejsce tylko wtedy, gdy występuje zagnieżdżenie zakresów. Zobacz en.wikipedia.org/wiki/Variable_shadowing .