Pass by Reference và Pass by Value trong Java Là Gì?
Khi làm việc với Java, việc hiểu rõ cách truyền tham số vào phương thức là rất quan trọng, vì nó ảnh hưởng đến cách mà dữ liệu được xử lý trong chương trình. Hai khái niệm quan trọng liên quan đến việc truyền tham số là Pass by Reference và Pass by Value. Bài viết này sẽ giải thích chi tiết về hai khái niệm này và cách chúng hoạt động trong Java.
1. Pass by Value
1.1. Khái niệm
Pass by Value có nghĩa là một bản sao của giá trị được truyền vào phương thức. Khi bạn truyền một biến vào phương thức, Java tạo ra một bản sao của giá trị của biến đó và sử dụng bản sao này trong phương thức.
1.2. Hành vi
Nếu giá trị của biến thay đổi bên trong phương thức, sự thay đổi đó không ảnh hưởng đến giá trị của biến gốc bên ngoài phương thức.
Điều này đúng cho cả kiểu dữ liệu nguyên thủy (primitive types) và đối tượng (reference types).
1.3. Ví dụ
public class PassByValueExample {
public static void main(String[] args) {
int number = 5;
System.out.println("Before method call: " + number); // In ra: 5
changeValue(number);
System.out.println("After method call: " + number); // Vẫn in ra: 5
}
public static void changeValue(int num) {
num = 10; // Chỉ thay đổi giá trị của biến num, không ảnh hưởng đến number
}
}
2. Pass by Reference
2.1. Khái niệm
Pass by Reference có nghĩa là một tham chiếu đến đối tượng được truyền vào phương thức. Thay vì truyền giá trị của biến, Java truyền địa chỉ của đối tượng trong bộ nhớ.
2.2. Hành vi
Khi một đối tượng được truyền vào phương thức, bất kỳ thay đổi nào được thực hiện đối với đối tượng trong phương thức sẽ ảnh hưởng đến đối tượng gốc bên ngoài phương thức. Điều này là do cả hai biến đều tham chiếu đến cùng một đối tượng trong bộ nhớ.
2.3. Ví dụ
class Person {
String name;
Person(String name) {
this.name = name;
}
}
public class PassByReferenceExample {
public static void main(String[] args) {
Person person = new Person("Alice");
System.out.println("Before method call: " + person.name); // In ra: Alice
changeName(person);
System.out.println("After method call: " + person.name); // In ra: Bob
}
public static void changeName(Person p) {
p.name = "Bob"; // Thay đổi thuộc tính name của đối tượng person
}
}
3. Sự khác biệt giữa Pass by Value và Pass by Reference trong Java
Tiêu chí
Pass by Value
Pass by Reference
Định nghĩa
Truyền một bản sao của giá trị
Truyền địa chỉ của đối tượng
Ảnh hưởng đến biến gốc
Không ảnh hưởng
Ảnh hưởng
Kiểu dữ liệu
Áp dụng cho cả kiểu nguyên thủy và đối tượng
Chỉ áp dụng cho đối tượng
Ví dụ
Thay đổi giá trị của biến nguyên thủy không ảnh hưởng đến biến gốc
Thay đổi thuộc tính của đối tượng ảnh hưởng đến biến gốc
4. Kết luận
Java luôn sử dụng Pass by Value cho cả kiểu dữ liệu nguyên thủy và tham chiếu. Tuy nhiên, vì đối tượng được truyền dưới dạng tham chiếu, nên các thay đổi trên đối tượng sẽ được phản ánh bên ngoài phương thức. Việc hiểu rõ sự khác biệt này là cần thiết để lập trình viên có thể quản lý và xử lý dữ liệu một cách hiệu quả trong Java.
This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.
Strictly Necessary Cookies
Strictly Necessary Cookie should be enabled at all times so that we can save your preferences for cookie settings.
If you disable this cookie, we will not be able to save your preferences. This means that every time you visit this website you will need to enable or disable cookies again.