Tôi mới có thể tạo một lớp mà ngay lập tức chỉ với toán tử =
, giống như lớp String
? Hoặc là một tính năng dành riêng cho lớp học String
trong Java?Tạo đối tượng bất biến, được tạo ra mà không cần
Trả lời
Bởi vì Java không hỗ trợ người dùng định nghĩa điều hành quá tải một trường hợp mới không thể được tạo ra với =
điều hành.
Check-out Why doesn't Java offer operator overloading? để biết thêm thông tin
Không, bạn không thể tạo ra một lớp học đó là khởi tạo chỉ với =
điều hành vì bạn không thể quá tải toán tử trong Java như bạn có thể trong C++ hoặc C# (xem Operator overloading in Java).
String
s được khởi tạo khi bạn sử dụng "something"
chỉ khi nó không tồn tại trong bộ nhớ, vì vậy bạn có thể tham chiếu đến chính xác đối tượng String
mỗi khi bạn viết "something"
.
Ví dụ, nếu bạn làm:
String a = "something";
String b = "something";
Sau đó
a == b; // will be true.
Bạn có thể có một cái nhìn tại những câu hỏi này để tìm hiểu thêm về cách String
đối tượng làm việc:
Mã String s = "Hello World!"
không tạo ra một mới String
. Nó gán một tham chiếu của một String
hiện có trong String Pool thành s
. Nếu String
không tồn tại trong String Pool, thì đối tượng String
mới được tạo trong Chuỗi nhóm, nhưng không phải với toán tử =
một mình.
này tạo mới String
objecs:
String s1 = new String("Hello World!"); // new Object
String s2 = new String("Hello World!"); // new Object
System.out.println(s1 == s2); // false
này có thể hoặc không thể tạo ra một đối tượng mới String
trong String Pool:
String s1 = "Hello World!";
String s2 = "Hello World!";
System.out.println(s1 == s2); // true
Bạn có thể nhận được khá gần với hành vi nêu trên với việc sử dụng getInstance()
mẫu, hãy xem xét điều này:
public class Singleton {
private Singleton(){}
private static class SingletonHelper{
private static final instance INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHelper.INSTANCE;
}
}
Sau đó, bạn có thể sử dụng:
Singleton s = Singleton.getInstance();
Đoạn mã đầu tiên không nhất thiết phải tạo một chuỗi 'String' mới trong nhóm chuỗi (các chuỗi được tạo bởi' chuỗi mới (...) 'không được chứa trong nhóm). – Nevay
@Nevay Bạn tất nhiên là đúng, lỗi của tôi, đã sửa chữa câu trả lời của tôi. –
- 1. Tạo đối tượng trong Symfony2 mà không cần Doctrine
- 2. Tạo các đối tượng bất biến từ javabean
- 3. Trình tạo ID cho các đối tượng được tạo ra
- 4. Các chuỗi được sử dụng trong System.out.println cũng có tạo ra các đối tượng bất biến mới không?
- 5. Làm thế nào để có được loại lớp mà không cần khởi tạo đối tượng?
- 6. Biến cuối cùng có thể được khởi tạo khi một đối tượng được tạo không?
- 7. Cách tạo biến cụ thể pthread mà không cần __thread
- 8. Có thể tạo một thể hiện của một đối tượng trong Java mà không cần gọi hàm tạo không?
- 9. Các đối tượng NSBlock được tạo ra như thế nào?
- 10. Tìm ra nơi biến được khởi tạo
- 11. Xuất Javascript - Khởi tạo Biến/Đối tượng
- 12. tạo đối tượng json với các biến
- 13. bộ khởi tạo đối tượng biến đổi?
- 14. Có thể tạo ra SQL được tạo ra bằng EclipseLink mà không cần phải tăng độ dài log?
- 15. Tạo đối tượng không thể được chọn
- 16. Làm cách nào để cập nhật đối tượng Người dùng mà không cần tạo đối tượng mới?
- 17. Làm thế nào để tạo bản sao của đối tượng lớp mà không cần tham chiếu?
- 18. Hibernate CompositeUserType cho đối tượng bất biến
- 19. Inheritance: đối tượng tạo
- 20. Tạo một HashMap trong Scala từ một danh sách các đối tượng mà không cần lặp
- 21. Phát video từ URL mới mà không cần tạo đối tượng AVPlayer mới
- 22. JavaScript Object - Gọi mà không cần tạo nó (như đối tượng Math)
- 23. Nhận giá trị ngẫu nhiên mà không cần tạo đối tượng `Random`
- 24. Trình tự động: Cập nhật giá trị thuộc tính mà không cần tạo đối tượng mới
- 25. Khi nào Spring tạo ra các đối tượng của các đối tượng được tiêm
- 26. Danh sách có thể được tạo ra mà tự đặt tên dựa trên tên đối tượng đầu vào không?
- 27. Có thể lấy chuỗi tên thuộc tính đối tượng mà không tạo đối tượng đối tượng không?
- 28. Tạo một mô hình trong phpunit mà không cần chế nhạo bất kỳ phương pháp nào?
- 29. Khởi tạo OpenGL mà không cần GLUT
- 30. Làm thế nào để thiết kế một đối tượng bất biến với khởi tạo phức tạp
Không, bạn không thể. Đó là một cái gì đó, như bạn đã nói, 'nằm bên trong Java'. – sudo
Và các chuỗi là * không * được khởi tạo bằng '='.Hằng số chuỗi được định nghĩa bằng '" ... "' và nó chỉ trở nên phức tạp hơn từ đó. Vì vậy, không, bạn không thể. Sử dụng 'mới'. Nếu bạn không thích 'new', bạn có thể ẩn nó sau một phương thức nhà máy tĩnh hoặc một cái gì đó tương tự. –
https://stackoverflow.com/questions/2068570/how-to-create-a-string-class-replica – soorapadman