【问题标题】:in Java, is JsonArray pass_by_value or pass_by_reference?在 Java 中,JsonArray 是 pass_by_value 还是 pass_by_reference?
【发布时间】:2021-03-13 08:57:00
【问题描述】:

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

}

【问题讨论】:

    标签: arrays pass-by-reference pass-by-value


    【解决方案1】:

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

    1. JsonArray jarr = new JsonArray(); -> 这里 jarr 指向地址 1
    2. func1(jarr); -> jarr 的引用传递给 obj
    3. func1(JsonArray obj) -> 使用 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/

    【讨论】:

      猜你喜欢
      • 2012-04-16
      • 2011-09-01
      • 2017-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      相关资源
      最近更新 更多