Final argument in java

mọi người cho em hỏi là trên web thì nói là tham số final không thể thay đổi giá trị khi đã truyền vào phương thức nhưng khi em code thì rõ ràng là nó đã thay đổi giá trị. Mọi người chỉ cho em biết nguyên nhân này với ạ

Khai báo final cho biến kiểu implicit (int, long, float …) thì giá trị sẽ không thể thay đổi.

Còn khai bảo final cho thể hiện của 1 object thì sẽ không khởi tạo lại được thể hiện đó (tức là không thể cấp phát vùng nhớ mới cho thể hiện đó, không thể gọi được constructor cho thể hiện đó ngoại trừ lúc khai báo). Còn các field vẫn có thể thay đổi giá trị được (trừ trường hợp các field ở trong cũng khai bảo final).

Từ khóa final giúp biến không thể thay đổi giá trị của nó dù có là tham số hay không, nếu biến là một object thì điều đó đảm bảo địa chỉ (reference) của biến đó không thể thay đổi.
Có nghĩa là bạn không thể gán cho nó một object mới nhưng hoàn toàn có thể thay đổi các thuộc tính trong class
VD:

public class Number{
public int num;
public Number(int number){
this.num=number;
}
}

public static void main(){
final Number unchangedObj=new Number(4);
unchangedObj=new Number(5); //Không được->Lỗi
unchangedObj.num=5; //Được
}
1 Like

cảm ơn các anh nhé, giờ thì em đã hiểu rồi

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?