这个问题可能很简单,只是为了确保100%确定要问它。这两种情况有什么区别 案例1:
this.store = new Ext.data.Store({
autoLoad: true,
url: 'NewJSON.json',
storeId: 'projectDropDown',
reader: new Ext.data.JsonReader(
{
root: 'ROOT'
}),
idProperty: 'ProjectID',
fields: [ 'ID', 'Text' ]
});
案例2:
{
"ROOT": {
"Tag": [{
"ID": 01,
"TEXT": "B"
},
{
"ID": 02,
"TEXT": "A"
}]
}
}
现在案例1打印为false,案例2打印为true。
有人可以解释原因吗?
答案 0 :(得分:3)
在第一个示例中,您忽略了s2.intern()
的返回值,它返回对池中String的引用(即s
)。
因此s2
仍引用原始的非池化字符串。
答案 1 :(得分:2)
String
是不可变的,所以在你写的第一个例子中:
String s2 = new String("Hello");
s2.intern();
s2
不会改变。所以这里:
System.out.println(s == s2);
您仍然将new String("Hello")
与"Hello"
进行比较,不要引用同一个对象,因为其中一个字符串是使用new
运算符创建的。
在第二个示例中,您将池值(使用intern()
)分配给variable
:
String s = "Hello";
String s1 = new String("Hello").intern();
所以这里:
System.out.println(s == s1);
s
和s1
指的是同一个对象。