30/09/2018, 19:39
Hỏi về đáp án đoạn code!
Mọi người cho em hỏi tại sao đoạn code dưới đây lại cho ra kết quả là 1 0 1 mà không phải là 1 1 1 ạ?
public class Ex1 {
int a, b;
public void f(){
a = b = 0;
int[] c = {0};
g(b, c);
System.out.println(a + " " + b + " " + c[0]);
}
public void g(int b, int c[]){
a = b = 1;
c[0] = 1;
}
public static void main(String args[]){
Q5 e = new Q5();
e.f();
}
Bài liên quan
vì a là biến toàn cục nên khi thay đổi trong hàm g thì nó sẽ hiểu là a thay đổi, còn b trong hàm g nó hiểu là tham số, tức là b trong hàm g là bản sao của b toàn cục, nên b trong g thay đổi nhưng b bên ngoài ko đổi, muốn nó thay đổi bạn phải viết
this.b = 1
Vậy thì c[0] trong hàm g cũng là bản sao của c[0] toàn cục ạ?
không, biến kiểu mảng là địa chỉ, nên thay đổi kiểu con trỏ chính là thay đổi nó luôn, còn b là thay đổi kiểu tham trị nên ra khỏi hàm thì mất tác dụng
Vâng cảm ơn em hiểu rồi ạ