Cho đoạn chương trình sau. Cho biết kết quả in lên màn hình sau khi thực thi?
class Value {
public int i = 15;
}
public class Test {
public static void main(String args[]) {
Test t = new Test();
t.first();
}
public void first() {
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.print(" " + v.i);
}
public void second(Value v, int i) {
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.print(v.i + " " + i);
}
}
class Value {
public int i = 15;
}
public class Test {
public static void main(String args[]) {
Test t = new Test();
t.first();
}
public void first() {
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.print(" " + v.i);
}
public void second(Value v, int i) {
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.print(v.i + " " + i);
}
}
public int i = 15;
}
public class Test {
public static void main(String args[]) {
Test t = new Test();
t.first();
}
public void first() {
int i = 5;
Value v = new Value();
v.i = 25;
second(v, i);
System.out.print(" " + v.i);
}
public void second(Value v, int i) {
i = 0;
v.i = 20;
Value val = new Value();
v = val;
System.out.print(v.i + " " + i);
}
}
Trả lời:
Đáp án đúng: B
Đoạn chương trình Java này liên quan đến việc truyền tham chiếu đối tượng và ảnh hưởng của nó đến các biến.
Hàm `first()`:
1. Khởi tạo `i = 5` (biến cục bộ).
2. Tạo một đối tượng `Value` và gán `v.i = 25`.
3. Gọi hàm `second(v, i)`.
4. Sau khi `second()` thực thi, in ra giá trị của `v.i`.
Hàm `second(Value v, int i)`:
1. Gán `i = 0` (chỉ ảnh hưởng đến bản sao cục bộ của `i`).
2. Gán `v.i = 20` (thay đổi giá trị của thuộc tính `i` của đối tượng `Value` được tham chiếu bởi `v`).
3. Tạo một đối tượng `Value` mới và gán tham chiếu của đối tượng mới này cho `v`. Lúc này `v` không còn trỏ đến đối tượng `Value` ban đầu được truyền vào nữa. Vì vậy lệnh `System.out.print(v.i + " " + i);` in ra `15 0` (giá trị mặc định của `i` trong class `Value` và giá trị của biến `i` trong hàm `second`)
Vì vậy, hàm `second` in ra "15 0".
Sau khi `second` thực thi, hàm `first` in ra giá trị `v.i`. Vì trong hàm `second`, biến `v` đã bị thay đổi để tham chiếu đến một đối tượng `Value` mới, nên đối tượng `Value` ban đầu được tạo trong hàm `first`, mà `v` tham chiếu đến, đã bị thay đổi giá trị `i` thành 20. Do đó, hàm `first` in ra "20".
Vậy kết quả in ra màn hình là: 15 0 20





