2017-08-14 42 views
16

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

+6

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

+12

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ự. –

+0

https://stackoverflow.com/questions/2068570/how-to-create-a-string-class-replica – soorapadman

Trả lời

14

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

16

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:

7

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(); 
+3

Đ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

+0

@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. –

Các vấn đề liên quan