01/10/2018, 08:19
Khác nhau giữa return "text" và return new String("text") trong java
Ví dụ em có 2 đoạn code sau:
static String getMessage() {
return "abc";
}
và
static String getMessage() {
return new String("abc");
}
Vậy có sự khác nhau nào ở 2 cách return trên không nếu ở hàm main em có lệnh gán như thế này
String s = getMessage();
Bài liên quan
Theo mình nghĩ là không vì String trong Java nó là một đối tượng.
"abc"
là String literal cònnew String("abc");
là String objectNếu bạn
return "abc";
thì Java sẽ kiểm tra trong String pool xem “abc” tồn tại hay chưa, nếu đã có thì ref getMessage() vào giá trị “abc” trong String pool, nếu chưa thì tạo mới “abc” trong String pool.Còn
return new String("abc");
thì luôn tạo 1 chuỗi “abc” mới trong String pool mà không cần kiểm tra gì cả.Về cơ bản thì 2 cách trên bạn dùng đều cho ra kết quả như nhau.
Có một chút khác biệt: return “text” thì trực tiếp gán vào kết quả hàm. Còn return new String(“text”) thì Java tạo thêm 1 object String (tốn thêm bao nhiêu byte trong RAM mình không nhớ) rồi gán giá trị của object đó vào kết quả hàm.
Đối với C#, Java hay các ngôn ngữ bậc cao khác có Garbage Collector thì chuyện này không vấn đề, các biến cục bộ sẽ được release tự động khi chạy hàm xong. Nhưng với C++ chẳng hạn, bạn “new” mà không “delete” thì cũng rắc rối đấy.
Vậy cơ bản là giống như khi mình khai báo
String s = "abc"
vàString s = new String("abc")
nhỉCảm ơn mọi người đã giải thích
địa chỉ khác :v nãy ông kia nói rồi mà.
Khác ở chỗ một cái được lưu trên common pool, một cái lưu trên heap
Theo mình biết thì
return new String("abc")
thì tạo 1 object String có giá trị “abc” ở trong Heap, chứ ko phải ở String pool, rồi trả về Object này.Cơ bản thì: String pool là 1 vùng nhớ nằm trong heap nên có nghĩa là String Object sẽ nằm ngoài vùng nhớ này
thạo cả c# và java bá đạo thế anh
Chính xác, cám ơn bạn đã nhắc mình.
học cả 2, Java thì đủ để giải phương trình bậc 2 =))