01/10/2018, 10:04

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 ạ

bumbum viết 12:13 ngày 01/10/2018
stackoverflow.com
Matt McCormick

Why can final object be modified?

java, final
asked by Matt McCormick on 07:17PM - 12 Mar 10
nullnguyen viết 12:04 ngày 01/10/2018

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).

Phạm Vinh viết 12:08 ngày 01/10/2018

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
}
Nguyễn Văn Sang viết 12:09 ngày 01/10/2018

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

Bài liên quan
0