-1

我将org.codehaus.jettison.json.JSONArray作为参数传递给方法,并在方法中更新(从数组中添加/删除元素)它。

但是这些变化并没有反映在调用者中。从源代码来看,该类似乎不是不可变的。我在代码方面做了如下的事情。

String jsonArrayAsString;
JSONArray ja = new JSONArray(jsonArrayAsString)
myMethod(ja);
// ja here remains unchanged

public void myMethod(JSONArray jsonArray){
   JSONArray ja1 = JSONArray();
   jsonArray = ja1;

}
4

2 回答 2

2

您不会改变jsonArray作为参数传递的对象。您在此代码段中所做的是更改引用的值。

在 , 的主体中myMethodjsonArray最初是对作为参数传递的对象的引用。在该方法的第二行中,您将此引用更改为指向新构造的对象ja1

请参阅Java 是“按引用传递”还是“按值传递”?以及关于方法/构造函数参数的本教程

为了改变你传递给的对象myMethod,你需要通过调用一个方法、设置一个属性等来改变它的状态。

于 2017-09-06T11:27:31.583 回答
0

不,org.codehaus.jettison.json.JSONArray 不是不可变的。

当您这样做jsonArray = ja1时,原始对象保持不变,仅更新 myMethod 范围内的本地引用。

要对传递的对象进行更改,您可以在传递的引用上调用方法或返回修改后的对象。

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:请浏览另一个答案中提到的链接,该链接显示了参考如何在 Java 中工作。

于 2017-09-06T11:34:04.713 回答