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();
	}

Vu Van Chung viết 21:56 ngày 30/09/2018

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

Newbie viết 21:43 ngày 30/09/2018

Vậy thì c[0] trong hàm g cũng là bản sao của c[0] toàn cục ạ?

Vu Van Chung viết 21:40 ngày 30/09/2018

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

Newbie viết 21:50 ngày 30/09/2018

Vâng cảm ơn em hiểu rồi ạ

Bài liên quan
0