【问题标题】:Java pass by reference [duplicate]Java通过引用传递[重复]
【发布时间】:2014-07-24 20:08:18
【问题描述】:

为什么在这段代码中我不能交换 StringBuffer 的?

 public static void main(String[] args) {
     StringBuffer a = new StringBuffer("One");
     StringBuffer b = new StringBuffer("Two");
     swap(a, b);
     System.out.println("a is " + a + "\nb is " + b);
 }

static void swap(StringBuffer a, StringBuffer b) {
    a.append(" more");
    b = a;
}

【问题讨论】:

  • @HotLicks 请不要侮辱或抨击...
  • 当然,您可以让swap 方法“工作”,方法是让它交换两个对象的内容
  • @Ordous - 抱歉。他清楚地了解 Java 的工作原理,彻底研究了 Java 是按引用调用还是按值调用,并且只是在拉扯我们的链条。
  • 看看这个答案:stackoverflow.com/a/40523/3579095
  • @HotLicks 这个问题显然质量低下,并且被多次讨论过。我想它将在几秒钟内关闭或标记为重复。用户也将因提出愚蠢的不费力问题和他提出问题的方式而获得他的反对票。向他展示这一点是正确的(如果这种情况持续存在,可能会取消提问的能力)。但是冒犯根本没有帮助。

标签: java pass-by-reference


【解决方案1】:

因为您使用的不是ab 变量的引用,而是new StringBuffer("One")new StringBuffer("Two") 引用。

因此,使用b = a,您不会更改主要但本地副本中的ab

【讨论】:

    【解决方案2】:

    Java 不支持按引用传递,只支持按值传递。 StringBuffer a是一个引用,这个引用是传值的。

    请不要使用 StringBuffer,因为它在十年前被 StringBuilder 取代。

    【讨论】:

      【解决方案3】:
      static void swap(StringBuffer a, StringBuffer b) {
             a.append(" more");
             b = a; // the change is local to swap(). It doesn't affect main()
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-16
        • 2011-08-28
        • 2013-10-31
        • 2017-08-12
        • 2013-11-21
        • 2012-03-13
        • 2018-07-09
        相关资源
        最近更新 更多