【问题标题】:String Object Array Updated with no = sign? [duplicate]字符串对象数组更新没有 = 符号? [复制]
【发布时间】:2015-11-20 22:01:54
【问题描述】:

我正在尝试了解以下代码的工作原理:

    ArrayList<String> aInt = new ArrayList<String>();
    Object[] bInt = null;

    aInt.add("1a");
    aInt.add("2b");
    aInt.add("3c");
    aInt.add("4d");

    bInt = new String[aInt.size()];

    aInt.toArray(bInt);

    for(int i=0; i < bInt.length; i++){
        System.out.println(bInt[i]);
    }

我理解除了 aInt.toArray(bInt); 之外的所有内容。我的问题是,如果您从不使用 bInt = aInt.toString(),那么实际上如何使用它来更新 bInt?我认为 java 只通过值而不是引用传递项目,所以这让我很难过。

我确实确认 System.out.println 语句确实打印出 1a、2b、3c 和 4d。

感谢您的帮助

【问题讨论】:

  • 一个对象的名字实际上是它的引用。
  • Java 只传递值,但通常传递的是对象引用。把它想象成传递一个指针。
  • 你认为toArray 是做什么的?你认为输出应该是什么?为什么?
  • JDev - 谢谢,我没有意识到它是如何工作的。 Azurefrog - 谢谢,从现在开始我就是这么想的! Sotirios Delimanolis - 我预计必须将 bInt 设置为 aInt 才能获取存储在 bInt 中的值。在 c++ 中,我知道你可以做这些事情,但在 Java 中,我认为你不能不实际设置一个等于另一个 AzureFrog - 我确实阅读了文档,但由于它被返回而不是设置,我对返回值的方式感到困惑存储在对象中

标签: java


【解决方案1】:

Java 仅按值传递,但任何对象的值,包括那些表示原始值(如字符串和整数)的对象都在实际传递引用的值。

因此,对象在逻辑上总是按引用传递,即使从技术上讲,您可能会争论代码按值传递。

例如,如果您将对象引用从局部变量传递给另一个方法,则原始方法中的局部变量不会改变(即在调用之后它仍然会引用同一个对象),即使对象它所指的可能会被修改。因此,不可变对象(如字符串)的巨大价值的一部分。

【讨论】:

  • 嗯,好的。感谢您的详细回复。我从来没有意识到它是如何工作的。这是有道理的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-02
  • 1970-01-01
  • 2011-05-29
  • 2022-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多