#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.
- JSONArray jarr = new JSONArray(); -> здесь jarr указывает на адрес1
- func1(jarr); -> ссылка jarr передается в obj
- func1(JSONArray obj) -> с вызовом func1(jarr) теперь obj также указывает на адрес1
- obj = new JSONArray(); -> obj теперь указывает на адрес2
- obj заполняется некоторыми значениями -> здесь заполняется address2 . адрес1 по-прежнему пуст.
- после возврата из funct1 -> jarr будет пустым, так как он указывает на address1, который не заполнен никакими значениями.
Решение
obj= new JSONArray(); -> удалите эту строку, чтобы obj по-прежнему указывал на адрес1.
При этом, если объект obj заполнен значениями, заполняется address1 . Поскольку jarr указывает на address1, после возврата из функции jarr не будет пустым.
Для получения более подробной информации проверьте https://www.geeksforgeeks.org/passing-and-returning-objects-in-java /