2015-05-01 44 views
4

中初始化XML創建的String數組和一之間也是有差別的創造中字符串的XML文件是什麼在Java類

<string-array name="stringName"> 
    <item>Item1</item> 
    <item>Item2</item> 
</string-array> 

一個字符串數組和Java的

String stringName[]={"Item1","Item2"}; 
initiliazing這之間的任何差別
+0

你在想什麼樣的差異?在字符串本身是否內聯方面可能存在差異...但是在這兩種情況下,您將只獲得兩個元素的數組... –

+0

字符串資源數組可以在應用程序中全局訪問,並且常量被編譯爲java字節碼;項目資源在apk中被編譯成二進制格式。訪問是非常有效的...如果兩者之間存在差異,則最多隻能是微不足道的。 –

+0

有沒有一種情況需要使用一種。在Java中使用初始化的字符串可以做些什麼,你無法對使用xml創建的字符串進行操作?我一直在瀏覽一些教程,並且我注意到其中一些創建了java中的字符串,一些創建了字符串xml文件。 – AdamV

回答

1

的主要區別是,定義爲string-array字符串可以輕鬆地本地化:

<string-array name="stringName"> 
    <item>@string/item1</item> 
    <item>@string/item2</item> 
</string-array> 

因此,如果你想讓他們翻譯,這是一個好主意把它們投入資源。

1

我能想到的一個區別是代碼中聲明的字符串(即String stringName[]={"Item1","Item2"};)被禁用,因此下面的代碼將評估爲true

String s1="this is a string"; 
String s2="this is a string"; 
if(s1==s2) { 
    ... 
} 

但是從,比方說,XML,兩個String對象不會有相同的身份,並因此「==」運營商將即使包含在兩個字符串的實際值來評估創建字符串是相同的。這適用於使用String.intern()之後,之後對具有相同值的兩個字符串對象的「==」評估將再次評估爲真。

下面的代碼演示的區別:

String s1[] = { "Item1", "Item2" }; 
    String s2[] = { "Item1", "Item2" }; 
    //true 
    System.out.println("Test.main: " + (s1[0] == s2[0])); 

    s1 = new String[] { new String("Item1"), new String("Item2") }; 
    s2 = new String[] { new String("Item1"), new String("Item2") }; 
    //false 
    System.out.println("Test.main: " + (s1[0] == s2[0])); 

    s1 = new String[] { new String("Item1").intern(), new String("Item2") }; 
    s2 = new String[] { new String("Item1").intern(), new String("Item2") }; 
    //true 
    System.out.println("Test.main: " + (s1[0] == s2[0])); 
+0

在Kai的答案中增加了爲重複值創建的字符串對象的數量可能有所不同。如果在XML中再次重複相同的'item',則會再次創建一個新的字符串對象,因爲所有可以在編譯時解析的字符串隱式地被隱藏,所以即使在'String a =「item1」 '和代碼中的其他地方,如果有'String b =「item1」',則只創建1個字符串對象。 – Arkantos

0

以檢索一個string-array

<string-array name="stringName"> 
    <item>Item1</item> 
    <item>Item2</item> 
</string-array> 

Resources res = getResources(); 
String[] stringName = res.getStringArray(R.array.stringName);