我在此搜索過,但關鍵字必須過於籠統以縮小相關位數。爲什麼在android中聲明一個字符串是有效的兩種方式,並且有什麼區別?在Android中String foo =「bar」與String foo = new String(「bar」)?
3
A
回答
3
這是java語法,不僅僅針對Android。這裏是對此的討論。 String vs new String()
4
使用new
關鍵字,您將創建一個新的字符串對象,其中使用foo = "bar"
將進行優化,以指向在應用程序中不同位置使用的相同字符串對象。
對於instacne:
String foo = "bar";
String foo2 = "bar";
編譯器將優化上述代碼是相同的確切的對象[foo == foo2
,在conradiction到foo.equals(foo2)
]。
編輯:經過一番搜索,@蘇爾坦是正確的。它不依賴編譯器的問題,它是在specs:
字符串文字總是指向類 字符串的同一實例(第4.3.1節)。
0
這不僅是關於Android,關於Java。
當你寫"xxxx"
它是一個文字字符串。這是一個String實例。請注意,具有相同值的所有文字字符串都是相同的實例。有關詳細信息,請參閱方法String.intern()
。
實施例:
String s1 = "abc";
String s2 = "abc";
在這個例子中
,s1 == s2
是真實的。
new String("xxx")
是複製構造函數。你需要一個字符串(文字),並從中創建一個新的實例。由於所有字符串都是不可變的,通常這是你不想做的事情。
實施例:
String s1 = "abc";
String s2 = new String("abc");
s1.equals(s2)
爲真
s1 == s2
是假
0
String x = new String("x")
有效地創建2個字符串。一個用於文字(這是一個沒有變量名稱的表達式),另一個則保留爲x。它是一樣的:
String x;
{
String a = "x";
x = new String(a);
}
相關問題
- 1. 在C++中使用auto foo =「bar」vs std :: string 11
- 2. 哪個`if(!isset($ foo)OR(isset($ foo)AND $ foo == $ bar))`或`if(!isset($ foo)OR $ foo == $ bar)`更好?
- 3. class Bar {operator Foo(); }
- 4. 如何篩選{「foo」:「bar」,「bar」:「foo」} grok只獲取foo字段?
- 5. 在javascript中,`{foo:「bar」}`和`{「foo」:「bar」}`有什麼區別?
- 6. 觸控筆中的'(foo bar)'和'foo bar'有什麼不同?
- 7. map <string,pair <string,foo * >>和map <string,pair <string,foo&>>有什麼區別?
- 8. [foo,bar] = [「foo」,「bar」]功能的名稱是什麼?
- 9. 爲什麼`foo == bar`和`bar == foo`返回不同的結果?
- 10. 正則表達式(或後面)匹配foo bar或bar foo
- 11. 我應該使用.find(「.foo .bar」)還是.children(「.foo」)。children(「.bar」)?
- 12. 「foo =(foo + 1)%bar」究竟幹什麼?
- 13. 返回<bar>富的</bar>代替<string>富</string>在WCF休息方法
- 14. 如果在做「math foo bar」,如何獲得Mathematica中的foo和bar?
- 15. 避免在以下語句中重複代碼:isset($ _ GET ['foo'] ['bar'])? $ _GET ['foo'] ['bar']:NULL;
- 16. 無法執行`:not(.foo .bar)`
- 17. 如何使用mod_rewrite將/ foo-bar重寫爲foo-bar.html,但將/ foo/bar重寫爲foo-bar.html?
- 18. php中的無限循環將變量從foo變爲bar,從bar變爲foo
- 19. Rails 2.3.12:分別路由'GET/foo','PUT/foo'和'<any>/foo/bar'
- 20. 如何將domain.com/foo/bar/baz/轉換爲像'foo bar baz'這樣的字符串?
- 21. 是「string s;」編譯爲「string s = new String(..);」?
- 22. javascript國際化和列表(例如[foo,bar,blah]爲「foo,bar and blah」)
- 23. 爲什麼在Ruby中,Array(「foo \ nbar」)== [「foo \ n」,「bar」]?
- 24. 檢索Foo類型<Bar>從TypeBuilder
- 25. CouchDB中foo LIKE「%bar%」的位置
- 26. 使用foo :: bar不會掩蓋typedef-name :: bar?
- 27. SqlConnection和Pool,保持開放連接kung-foo或foo-bar?
- 28. 如何在不重複「foo」的情況下寫入「WHERE foo ='bar'或foo ='baz'OR ...」
- 29. className.main(new String [] {「filename.txt」})?
- 30. 它是一個法律符號:Foo&foo = Bar;
它們是一樣的。我建議檢查一下:http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html你基本上實例化一個新的String對象實例。 – Robert 2012-01-04 15:54:54
字符串是不可變的,所以我懷疑沒有區別。你可以檢查每個生成的字節碼是否有差異。 – Mitch 2012-01-04 15:55:11
可能應該關閉[String vs new String()]的副本(http://stackoverflow.com/questions/3052442/what-is-the-difference-between-text-and-new-stringtext-in-java ) – Sulthan 2012-01-04 16:05:26