Sự khác nhau giữa String str = new String("SOME")
và String str="SOME"
Các khai báo này có thay đổi hiệu suất hay không.Khai báo chuỗi Java
Trả lời
String str = new String("SOME")
luôn tạo ra một đối tượng mới trên heap
String str="SOME"
sử dụng String pool
Hãy thử ví dụ nhỏ này:
String s1 = new String("hello");
String s2 = "hello";
String s3 = "hello";
System.err.println(s1 == s2);
System.err.println(s2 == s3);
Để tránh tạo các đối tượng unnecesary về việc sử dụng đống hình thức thứ hai.
Có sự khác biệt nhỏ giữa cả hai.
khai Second assignates tài liệu tham khảo liên quan đến hằng SOME
vào biến str
khai đầu tiên tạo ra một chuỗi mới có giá trị cho giá trị của hằng số SOME
và assignates tham chiếu của nó vào biến str
.
Trong trường hợp đầu tiên, một chuỗi thứ hai đã được tạo có cùng giá trị SOME
hàm ý nhiều thời gian bắt đầu hơn. Kết quả là, bạn nên tránh nó. Hơn nữa, tại thời gian biên dịch, tất cả các hằng số SOME
được chuyển đổi thành cùng một thể hiện, sử dụng ít bộ nhớ hơn.
Kết quả là, luôn thích cú pháp thứ hai.
Đối với bản ghi, có các tình huống trong đó 'chuỗi mới (Chuỗi)' có ý nghĩa, giống như nếu bạn có một chuỗi rất lớn và bạn chỉ quan tâm đến việc giữ lại một chuỗi con nhỏ . Các phương thức 'substring' chỉ trả về một dạng xem thừa của chuỗi ban đầu, do đó, bằng cách sử dụng' new String (bigString.substring (a, b)) 'buộc một bản sao và cho phép GC lấy lại nội dung của' hugeString' khi nó đi ra khỏi phạm vi. Họ không nên làm cho nó một nhà xây dựng, mặc dù ... – gustafc
Trường hợp thú vị của tối ưu hóa, quả thật vậy, nhưng tôi sẽ không đi con đường này trước khi đã thực hiện một số kiểm tra profiler (vì vậy bạn sẽ, tôi đoán). – Riduidel
Đầu tiên sẽ tạo đối tượng String mới trong heap và str sẽ tham chiếu nó. Ngoài ra, chữ cũng sẽ được đặt trong nhóm String. Nó có nghĩa là 2 đối tượng sẽ được tạo và 1 biến tham chiếu.
Tùy chọn thứ hai sẽ tạo chuỗi ký tự bằng chữ trong nhóm và chỉ str sẽ tham chiếu nó. Vì vậy, chỉ có 1 đối tượng sẽ được tạo và 1 tham chiếu. Tùy chọn này sẽ sử dụng cá thể từ String pool luôn luôn thay vì tạo một thể hiện mới mỗi khi nó được thực hiện.
- 1. Khai báo chuỗi C++
- 2. Chuỗi C++ Khai báo
- 3. Java - Khai báo các mảng
- 4. Khai báo gói Maven + Java
- 5. Khai báo mảng chuỗi lạ Cú pháp
- 6. Khai báo một LinkedList trong Java
- 7. Khai báo biến enum trong Java bean
- 8. "AndroidManifest.xml không khai báo gói Java" lỗi
- 9. Khai báo mảng Mảng Byte trong Java
- 10. Khai báo một trình lặp trong Java
- 11. Java Enums: Phương thức triển khai sau khi khai báo?
- 12. chuỗi kết nối khai báo trong iis mà không khai báo trong web.config
- 13. regex để khớp khai báo biến trong java
- 14. Làm cách nào tôi có thể khai báo mảng Chuỗi động trong Java
- 15. Khai báo đối tượng Java với tên kiểu/lớp của nó như là chuỗi
- 16. mã thông báo chuỗi trong Java
- 17. Làm thế nào để khai báo chuỗi trong C
- 18. tại sao chuỗi không khai báo trong phạm vi
- 19. Làm cách nào để khai báo một chuỗi chuỗi có kích thước không xác định?
- 20. Xác nhận khai báo các biểu mẫu trong Java/Swing
- 21. Phím tắt khai báo java eclipse là gì?
- 22. @interface khai báo mặc định sử dụng trong Java
- 23. Cách tốt nhất để khai báo biến logger trong java
- 24. tại sao hằng số java được khai báo là tĩnh?
- 25. Java, khai báo biến với nhiều giao diện?
- 26. Java: Spring Framework: Khai báo Bản đồ lồng nhau
- 27. Có thể khai báo biến 1 bit trong Java không?
- 28. ArrayList hoặc khai báo danh sách trong Java
- 29. Lấy chỉ lĩnh vực tĩnh khai báo trong Java lớp
- 30. Chuyển đổi Java: khai báo biến và phạm vi
Xem thêm http://stackoverflow.com/questions/334518/java-strings-string-s-new-stringsilly và http://stackoverflow.com/questions/390703/what-is-the-purpose-of -e-expression-new-string-in-java – polygenelubricants