用xml创建的字符串数组和用Java类初始化的字符串数组有什么区别

用xml创建的字符串数组和用Java类初始化的字符串数组有什么区别,java,android,xml,string,Java,Android,Xml,String,在字符串xml文件中创建字符串数组有什么区别吗 <string-array name="stringName"> <item>Item1</item> <item>Item2</item> </string-array> 我能想到的一个区别是,代码中声明的字符串(即stringstringname[]={“Item1”、“Item2”};)是插入的,因此以下代码将计算为true: 但是,对于由XML创建

在字符串xml文件中创建字符串数组有什么区别吗

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

我能想到的一个区别是,代码中声明的字符串(即
stringstringname[]={“Item1”、“Item2”};
)是插入的,因此以下代码将计算为true:

但是,对于由XML创建的字符串,两个字符串对象将不具有相同的标识,因此“==”运算符将计算为false,即使两个字符串中包含的实际值相同。在使用
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]));

要检索
字符串数组

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

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

项目1
项目2
Resources res=getResources();
String[]stringName=res.getStringArray(R.array.stringName);

主要区别在于定义为
字符串数组的字符串可以轻松本地化:

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

@字符串/项目1
@字符串/项目2

因此,如果你想把它们翻译成英文,最好把它们放到参考资料中。

你认为它们有什么不同?在字符串本身是否内联方面可能存在差异。。。但在这两种情况下,您都将得到一个包含两个元素的数组……字符串资源数组可以在应用程序中全局访问,常量被编译成java字节码;项目资源在apk中编译成二进制格式。访问任何一个都是非常高效的。。。如果两者之间有区别,那最多也就是微不足道的1.有没有一种情况我应该用一种来代替另一种。对于用Java初始化的字符串,您可以做一些用xml创建的字符串不能做的事情吗?我已经阅读了一些教程,我注意到其中一些是用java创建字符串的,还有一些是在字符串xml文件中创建的。@AdamV,您必须使用哪种方法取决于您的要求如果您需要字符串数组在应用程序中的多个位置,那么您必须在字符串中定义一次资源,并通过应用程序访问任意位置,如果您只需要在一个位置,则试着仅在该位置进行定义。Kai的回答补充道,为重复值创建的字符串对象的数量可能有所不同。如果相同的
在XML中再次重复,则会再次创建一个新的字符串对象,其中可以在编译时解析的所有字符串文本都被隐式插入,因此即使是
字符串a=“item1”
和代码中的其他地方,如果存在
字符串b=“item1”
,也会这样做,仅创建1个字符串对象。
<string-array name="stringName">
  <item>Item1</item>
  <item>Item2</item>
</string-array>

Resources res = getResources();
String[] stringName = res.getStringArray(R.array.stringName);
<string-array name="stringName">
     <item>@string/item1</item>
     <item>@string/item2</item>
</string-array>