在 Java 中,JsonArray 是 pass_by_value 还是 pass_by_reference?

in Java, is JsonArray pass_by_value or pass_by_reference?

提问人:Vivek Raja 提问时间:12/1/2020 最后编辑:Vivek Raja 更新时间:12/2/2020 访问量:475

问:

在 Java 中,JsonArray 是 pass_by_value 还是 pass_by_reference?

我想为每次迭代设置新的 JsonArray。我可以用不同的逻辑来实现这一点。 但我只是想知道下面的逻辑有什么问题。 根据我的理解,在java中,所有使用new创建的对象都作为引用传递。

JsonArray jarr= new JsonArray();

for(i=0 ; i<5; i++)
{
   func1(jarr);  // for each call to func1, I need to create new JsonArray.
   // after the call returns from func1, jarr is empty.

}

func1(JsonArray obj)
{
    obj= new JsonArray();

    JsonObject jo_properties = new JsonObject();
    jo_properties.addProperty("test_name", "test_value");

    obj.add(jo_properties);

    // until here I able see all the filled values in obj.

}
数组 按引用传递 值传递

评论


答:

0赞 Vivek Raja 12/2/2020 #1

基本上,这是一个在 java 中传递和返回对象的问题。

  1. JsonArray jarr = 新 JsonArray();-> 这里 jarr 指向 address1
  2. func1(jarr);-> jarr 的引用传递给 obj
  3. func1(JsonArray obj) -> with func1(jarr) 调用,现在 obj 也指向 address1
  4. obj = 新 JsonArray();-> obj 现在指向 address2
  5. obj 填充了一些值 -> 此处填充了 address2。address1 仍为空。
  6. 从 Funct1 返回后 -> jarr 将为空,因为它指向 address1,该地址未填充任何值。

溶液

obj= 新 JsonArray();->删除此行,以便 obj 仍将指向 address1。

这样,如果 obj 填充了值,则填充了 address1。 由于 jarr 指向 address1,因此从函数返回后,jarr 不会为空。

有关更多详细信息,请查看 https://www.geeksforgeeks.org/passing-and-returning-objects-in-java/