Tôi biết rằng trong Java, mọi thứ đều được truyền theo giá trị. Nhưng đối với các đối tượng, nó là giá trị của tham chiếu đến đối tượng được truyền. Điều này có nghĩa rằng đôi khi một đối tượng có thể thay đổi thông qua một tham số, đó là lý do tại sao, tôi đoán, mọi người nói, Không bao giờ sửa đổi các tham số.Băng qua "Giá trị tham chiếu"? Một số làm rõ cần thiết
Nhưng trong đoạn mã sau, có điều gì đó khác xảy ra. s
trong changeIt()
không thay đổi khi bạn nhận được trở lại main()
:
public class TestClass {
static String str = "Hello World";
public static void changeIt(String s) {
s = "Good bye world";
}
public static void main(String[] args) {
changeIt(str);
System.out.println(str);
}
}
Tôi đoán - và tôi muốn xác nhận - đó là khi bạn nói s = "something"
nó giống hoặc tương đương với nói String s = new String("something")
. Đây có phải là lý do vì sao s
không thay đổi? Có phải nó đã được gán một đối tượng hoàn toàn mới cục bộ bị bỏ đi khi bạn thoát khỏi changeIt()
?
Tôi đã thấy loại câu hỏi/câu trả lời này trước đây và tôi vẫn * cảm thấy mình cần đánh giá. +1 – BlackVegetable
Nó không thay đổi vì các chuỗi trong Java là các đối tượng bất biến. – anio
@anio Không, đó không phải là lý do mã cụ thể này không thay đổi chuỗi. Nó sẽ là hành vi tương tự cho bất kỳ đối tượng, bất biến hay không (kể từ khi ông đang làm nhiệm vụ, không gọi bất kỳ phương pháp trên đối tượng nhận được) – nos