Các bạn đã được tìm hiểu về biến primitive trong Java ở bài viết này và bài viết này, biến tham chiếu thì ở bài viết này. Trong bài viết này, chúng ta sẽ tìm hiểu thêm về hai loại biến này khi chúng được truyền vào một phương thức dưới dạng tham số các bạn nhé!
Truyền biến primitive vào một phương thức
Khi chúng ta truyền một biến primitive vào một phương thức thì giá trị của nó sẽ được copy và truyền vào cho phương thức đó. Điều này có nghĩa, giá trị của biến primitive này sẽ không thay đổi khi kết thúc thực thi phương thức mặc dù có thể trong quá trình thực thi phương thức này, chúng ta có thay đổi giá trị của nó.
Hãy xem xét đoạn code ví dụ sau đây nhé các bạn:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package com.huongdanjava; public class Example { private int number; public void increase(int n) { n = n + 1; System.out.println(n); } public static void main(String[] args) { Example e = new Example(); System.out.println(e.number); e.increase(e.number); System.out.println(e.number); } } |
Kết quả:
1 2 3 |
0 1 0 |
Trong ví dụ này, chúng ta đã truyền cho phương thức increase() trong class Example một biến primitive n kiểu int. Phương thức này đã tăng giá trị của biến primitive mà chúng ta truyền vào. Nhưng rõ ràng các bạn thấy, giá trị của biến number trong đối tượng Example vẫn không thay đổi sau khi được truyền vào phương thức increase().
Truyền biến tham chiếu vào một phương thức
Giả sử, mình có class Student với nội dung như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package com.huongdanjava; public class Student { private String name; public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } |
Giờ mình sẽ làm một ví dụ để sử dụng đối tượng Student này trong một phương thức như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
package com.huongdanjava; public class Example { public void swap(Student s1, Student s2) { Student temp = s1; s1 = s2; s2 = temp; } public static void main(String[] args) { Student student1 = new Student("Khanh"); Student student2 = new Student("Thanh"); Example e = new Example(); e.swap(student1, student2); System.out.println(student1.getName()); System.out.println(student2.getName()); } } |
Trong ví dụ trên, mình đã sử dụng đối tượng Student trong phương thức swap() với ý định hoán đổi sự tham chiếu của hai biến cho nhau. Các bạn hãy xem kết quả như sau:
1 2 |
Khanh Thanh |
Các bạn thấy đó, sự tham chiếu của hai biến student1 và student2 vẫn không có sự thay đổi sau khi phương thức swap() được thực thi.
Nhưng sẽ như thế nào nếu mình thay đổi trạng thái của đối tượng Student, các bạn hãy xem xét ví dụ sau nhé!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package com.huongdanjava; public class Example { public void changeName(Student s, String name) { s.setName(name); } public static void main(String[] args) { Student student = new Student("Khanh"); Example e = new Example(); e.changeName(student, "Thanh"); System.out.println(student.getName()); } } |
Kết quả:
1 |
Thanh |
Các bạn thấy đó, nếu mình thay đổi trạng thái của đối tượng thì sau khi phương thức được thực thi, trạng thái của đối tượng cũng thay đổi theo.