org.codehaus.jettison.json.JSONArray 是不可变的吗?
Is org.codehaus.jettison.json.JSONArray Immutable?
我将 org.codehaus.jettison.json.JSONArray 作为参数传递给方法,并在方法中更新(数组中的 add/remove 个元素)它。
但是调用者没有反映出变化。从源代码来看,class 似乎不是不可变的。我在代码方面做了如下的事情。
String jsonArrayAsString;
JSONArray ja = new JSONArray(jsonArrayAsString)
myMethod(ja);
// ja here remains unchanged
public void myMethod(JSONArray jsonArray){
JSONArray ja1 = JSONArray();
jsonArray = ja1;
}
您没有改变作为参数传递的 jsonArray
对象。您在此代码段中所做的是更改引用的值。
在 myMethod
的正文中,jsonArray
最初是对作为参数传递的对象的引用。在该方法的第二行中,您将此引用更改为指向新构造的对象 ja1
.
参见 Is Java "pass-by-reference" or "pass-by-value"? and this tutorial on method/constructor arguments。
为了改变你传递给myMethod
的对象,你需要通过调用一个方法,设置一个属性等来改变它的状态
不,org.codehaus.jettison.json.JSONArray 不是不可变的。
执行jsonArray = ja1
时,原始对象保持不变,仅更新 myMethod 范围内的本地引用。
要对传递的对象进行更改,您可以根据传递的引用调用方法或return修改后的对象。
String jsonArrayAsString;
JSONArray ja = new JSONArray(jsonArrayAsString)
myMethod(ja);
// ja now contains new object element
ja = myMethod1(ja);
// ja now points to a new JSONArray containing an elements from the original array with another additional element
public void myMethod(JSONArray jsonArray){
jsonArray.put(object); // this will add object to the original JSONArray
}
public JSONArray myMethod1(JSONArray jsonArray){
JSONArray a = new JSONArray();
a.put(jsonArray.get(0));
a.put(object);
return a;
}
PS:请仔细阅读另一个答案中提到的 link,其中显示了引用在 Java 中的工作方式。
我将 org.codehaus.jettison.json.JSONArray 作为参数传递给方法,并在方法中更新(数组中的 add/remove 个元素)它。
但是调用者没有反映出变化。从源代码来看,class 似乎不是不可变的。我在代码方面做了如下的事情。
String jsonArrayAsString;
JSONArray ja = new JSONArray(jsonArrayAsString)
myMethod(ja);
// ja here remains unchanged
public void myMethod(JSONArray jsonArray){
JSONArray ja1 = JSONArray();
jsonArray = ja1;
}
您没有改变作为参数传递的 jsonArray
对象。您在此代码段中所做的是更改引用的值。
在 myMethod
的正文中,jsonArray
最初是对作为参数传递的对象的引用。在该方法的第二行中,您将此引用更改为指向新构造的对象 ja1
.
参见 Is Java "pass-by-reference" or "pass-by-value"? and this tutorial on method/constructor arguments。
为了改变你传递给myMethod
的对象,你需要通过调用一个方法,设置一个属性等来改变它的状态
不,org.codehaus.jettison.json.JSONArray 不是不可变的。
执行jsonArray = ja1
时,原始对象保持不变,仅更新 myMethod 范围内的本地引用。
要对传递的对象进行更改,您可以根据传递的引用调用方法或return修改后的对象。
String jsonArrayAsString;
JSONArray ja = new JSONArray(jsonArrayAsString)
myMethod(ja);
// ja now contains new object element
ja = myMethod1(ja);
// ja now points to a new JSONArray containing an elements from the original array with another additional element
public void myMethod(JSONArray jsonArray){
jsonArray.put(object); // this will add object to the original JSONArray
}
public JSONArray myMethod1(JSONArray jsonArray){
JSONArray a = new JSONArray();
a.put(jsonArray.get(0));
a.put(object);
return a;
}
PS:请仔细阅读另一个答案中提到的 link,其中显示了引用在 Java 中的工作方式。