в Java является ли JSONArray pass_by_value или pass_by_reference?

#arrays #pass-by-reference #pass-by-value

#массивы #передача по ссылке #передача по значению

Вопрос:

в 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.

}
 

Ответ №1:

По сути, это вопрос передачи и возврата объектов в java.

  1. JSONArray jarr = new JSONArray(); -> здесь jarr указывает на адрес1
  2. func1(jarr); -> ссылка jarr передается в obj
  3. func1(JSONArray obj) -> с вызовом func1(jarr) теперь obj также указывает на адрес1
  4. obj = new JSONArray(); -> obj теперь указывает на адрес2
  5. obj заполняется некоторыми значениями -> здесь заполняется address2 . адрес1 по-прежнему пуст.
  6. после возврата из funct1 -> jarr будет пустым, так как он указывает на address1, который не заполнен никакими значениями.

Решение

obj= new JSONArray(); -> удалите эту строку, чтобы obj по-прежнему указывал на адрес1.

При этом, если объект obj заполнен значениями, заполняется address1 . Поскольку jarr указывает на address1, после возврата из функции jarr не будет пустым.

Для получения более подробной информации проверьте https://www.geeksforgeeks.org/passing-and-returning-objects-in-java /