Làm sao để cho hàm con thay đổi giá trị biến hàm chính

java

(Lan Trần) #1

Mọi người cho em hỏi với ạ, em mới học java, đang bế tắc chỗ truyền tham chiếu dạng như c/c++ bằng con trỏ, bên java dùng gì để hàm con thay đổi được giá trị trong hàm chính nhỉ?
Em cảm ơn nhiều ^^


(Ngô Anh Đức) #2

Java làm gì có con trỏ. Bạn xem lại lý thuyết xem. Theo mình nhớ thì chỉ có kiểu dữ liệu cơ sở (int, double …) và kiểu dữ liệu tham chiếu (String, các Object…). Mỗi đối tượng khi khởi tạo mặc định đã là 1 tham chiếu rồi.

Class Swap{
	public void Swap(int a , int b){
		int temp = a;
		a = b;
		b = temp;
	}
	
	public static void main(String[] args){
		Swap swap = new Swap();
		int a =5;
		int b = 7;
		swap.Swap(a,b);
	}
}

đại loại là bạn làm thế nào tạo ra một Class theo yêu cầu đề ra. Sau đó, import nó vào chỗ có hàm Main và khởi tạo 1 đối tượng. Phần còn lại là dùng phương thức mà bạn mong muốn.


(aduka) #3

Đơn giản thế này (Java với C# như nhau)

Class_A a = ....
a.text = "abc"

truyền a vào chỗ nào đó, mình đổi a.text thì chỗ nào đó cũng đổi theo.
nhưng bạn đổi cái a thì nó lại khác.

C# với java nó quản lý các list object. (giúp quản lý bộ nhớ tự động tốt hơn). Mỗi biến sẽ gắn với 1 object (khá giống con trỏ)

Lưu ý là 1 object có thể có nhiều biến. Nếu object mà không được gắn với biến nào thì nó sẽ tự động dọn dẹp bộ nhớ đó.

Ví dụ: a -> object_1, trong object_1 có biến text -> object_5.
bạn đổi a.text = "def" thì biến text trong object_1 sẽ a.text -> object_10 chẳng hạn.

Giờ bạn truyền biến a vào method chẳng hạn. nó sẽ copy ra 1 biến khác biến a ban đầu nhưng vẫn trỏ vào object_1. bạn đổi giá trị của biến a này thì nó sẽ trỏ sang object khác, trong khi biến a ban đầu vẫn trỏ về object_1. Nếu bạn dùng ref thì nó sẽ không copy mà là biến a nguyên thủy lúc truyền vào đó luôn.

Còn về vụ truyền biến bạn có thể dùng ref


(Ngô Anh Hưng) #4

Java sử dụng cơ chế pass-by-value nên không thế như bạn muốn được.
Có thể dùng cách làm là hàm con return giá trị mình muốn
hoặc đưa value đó vào mảng để giải quyết


89% Thành viên có cách giải cho một câu hỏi. Bạn thì sao?