對不起,如果這個問題已經被問到或者它是否過時。將值分配給String類而不創建新實例
字符串是一個類。我們可以將值賦給String而不創建新的實例對象。
像String someString = "Value";
這是如何工作的,而不用於字符串製作實例?是否可以創建用戶定義的類來直接分配值而不創建新對象?
對不起,如果這個問題已經被問到或者它是否過時。將值分配給String類而不創建新實例
字符串是一個類。我們可以將值賦給String而不創建新的實例對象。
像String someString = "Value";
這是如何工作的,而不用於字符串製作實例?是否可以創建用戶定義的類來直接分配值而不創建新對象?
看到這個interesting article:
字符串真的特別
Java的設計人員決定保留原始類型爲面向對象的語言,而不是將所有東西都作爲對象,因此可以提高語言的性能。基元被存儲在調用堆棧中的 ,其需要更少的存儲空間並且更便宜地操作。另一方面,對象存儲在程序堆 中,這需要複雜的內存管理和更多的存儲空間。 由於性能原因,Java的字符串被設計爲介於 原語和類之間。
另外:
Java已經保持字符串文字 提供一種特殊的機制 - 在一個所謂的串公共池..
當你這樣做:
String myStr1 = "Hello";
String myStr2 = "Hello";
然後
myStr1 == myStr2
是真,因爲他們都存儲在池(閱讀文章)。
但是,如果你建立一個新的String對象:
String myStr1 = new String("Hello");
String myStr2 = new String("Hello");
然後引用不相等。
我強烈建議您訪問JLS。它說,字符串被視爲以不同的方式,就像那樣:)
字符串是一種特殊情況。 String
文字創建於the string pool
。在池中添加字符串後,如果聲明瞭具有相同值的另一個字符串,則引用將指向池中的相同字符串。
並回答你的問題,你不能創建用戶定義的類,不使用new
。只有當您僅使用該類的靜態方法和字段,然後才使用 ClassName.StaticFieldOrMethod
。
String str = "abc";
等同於:
char data[] = {'a', 'b', 'c'};
or
String str = new String(data);
對於用戶定義的類,你必須創建一個對象。 參考文檔,請了解更多信息: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
要知道更多關於String類的工作原理是指
我想你的意思是,「like'String something =」Value「;'' –
String =」Value「;將無法正常工作:) – Lucas
@chris - 感謝您的糾正。 :-) – OneTwo