【问题标题】:Java - Static Void Method - LinkedList - Pass By ValueJava - 静态 Void 方法 - LinkedList - 按值传递
【发布时间】:2013-04-12 09:20:30
【问题描述】:

是否可以在 Java 中创建以下静态 void 方法?

public static void reverse(LinkedList<String> linkedlist)

{

//Code would go here...

}

据我了解,由于 Java 是按值传递的,这是不可能的,对吗?

【问题讨论】:

  • 您是否尝试过编写代码以查看在此处发布之前会发生什么? LinkedList 是一个 reference 变量,所有区别都在其中。我的建议:先试试。该站点无法替代您自己的 Java 编译器。
  • 提示:有一个静态方法 Collections.reverse(List&lt;?&gt; list) 适用于任何类型的可修改列表,包括 LinkedList
  • 在处理对象时,Java 按值传递它们的引用。它甚至给人一种 Java 通过引用传递对象的印象。
  • 我认为验证问题的最佳方法是: ---------- 试试你的IDE,比如eclipse。如果它不抛出异常,代码是正确的。否则出事。 ----------
  • “不抛出异常”并不完全是对代码正确性的完整测试。

标签: java linked-list pass-by-value


【解决方案1】:

如果你说的是股票java.util.LinkedList 类,那么当然可以编写这样的方法。事实上,已经有一个:java.util.Collections.reverse(List&lt;?&gt; list) 适用于任何可修改的列表(包括LinkedList)。它反转列表的元素。

如果您说的是自定义LinkedList 类,则取决于该类的实现方式。如果LinkedList 对象只是带有数据的链接节点系列,那么不,您无法反转列表,因为您无法更改第一个元素;这将需要更改 linkedList 引用的内容。您可以在方法内部执行此操作,但不会影响调用代码中的实际参数。这就是按值传递的结果。

但是,java.util.LinkedList 的结构并非如此。这些节点位于LinkedList 对象本身的内部。对象引用不需要改变所有元素的顺序。

【讨论】:

    【解决方案2】:

    Java 只支持按值传递,但您发布的代码不会出错,因为它也是按值传递的。 参考这些链接Is Java "pass-by-reference" or "pass-by-value"?Are Java function parameters always passed-by-value?Immutable and pass by valuehttp://www.javaworld.com/javaqa/2000-05/03-qa-0526-pass.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2017-04-26
      • 2016-07-03
      • 2014-09-08
      相关资源
      最近更新 更多