Mã Java này:
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);
}
}
sẽ xuất ra điều này:
Số đồ chơi trong trò chơi 5 Số đồ chơi trong khi chơi 6 Số đồ chơi trong chính 5
Trong C ++, tôi có thể truyền toyNumber
biến dưới dạng pass bằng tham chiếu để tránh đổ bóng tức là tạo một bản sao của cùng một biến như dưới đây:
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;
}
và đầu ra C ++ sẽ là thế này:
Số đồ chơi trong trò chơi 5 Số đồ chơi trong khi chơi 6 Số đồ chơi trong chính 6
Câu hỏi của tôi là - Mã tương đương trong Java có được đầu ra giống như mã C ++, với điều kiện Java được truyền theo giá trị chứ không phải chuyển qua tham chiếu ?
toyNumber
biến được khai báo trong main
phương thức không nằm trong phạm vi trong play
phương thức. Shadowing trong C ++ và Java chỉ xảy ra khi có các phạm vi lồng nhau. Xem en.wikipedia.org/wiki/Variable_shadowing .