Java 静态方法与非静态方法的参数传递差异

Java 静态方法与非静态方法的参数传递差异,java,Java,静态方法处理参数是否与非静态方法不同?假设我的项目中有以下类/方法: public abstract class A { public static void populateList(List<Item> list) { list.add(new Item("something")); //Item is custom class } 然后方法中指向list的指针与指向myList的指针不同,因此我猜该方法的本地副本已经创建,并且“something2”被

静态方法处理参数是否与非静态方法不同?假设我的项目中有以下类/方法:

public abstract class A {
   public static void populateList(List<Item> list) {
      list.add(new Item("something")); //Item is custom class
   }
然后方法中指向
list
的指针与指向
myList
的指针不同,因此我猜该方法的本地副本已经创建,并且“something2”被添加到此副本中。结果是,在这种情况下,原始myList不会更改。
这种行为正常吗?您是否有任何解释或链接到解释如何在静态函数中传递参数
是的,我知道如果我想更改列表,最好从函数中返回新列表,但我只是喜欢讨价还价,因为我没有发现任何地方解释过这个主题。谢谢

编辑

如注释中所述,参数在静态和非静态方法中的处理方式相同。我在这里没有列出的代码中犯了一个错误。

在正常情况下,应该没有区别。Java中的所有方法参数都通过引用传递值,这意味着列表的地址(指针)被复制到被调用方法的参数中


我只能想到一种情况,在这种情况下,您所描述的行为可能会发生:您使用的是提供面向方面编程特性的框架吗?您的非静态方法调用可能被拦截

这是一条底线,Java中的所有方法参数都是引用值。

您确定在第二种情况下未修改原始副本吗。我觉得应该修改一下。请重新检查。在
静态方法中的参数处理与实例方法中没有区别。好吧,至少在我的项目中没有。我将在普通Java应用程序中重新测试它,但在调试时,我可以清楚地看到方法体中的对象“list”与调用方传递的“myList”具有不同的地址。此外,返回者列表未修改(具有零项…不为空)。Item类的定义会改变什么吗?这只是字符串和bool holder。方法中不能有和传递地址不同的地址,请发布完整的代码。你们是对的…我的错。方法中的列表的新地址由我将gson分配给创建新列表的列表的行创建,而不是更改当前列表。呃……在几个小时的开发之后,我们应该休息一下,而不是问一些愚蠢的问题:(好吧,如果有什么不同的话,这是Android项目,这个项目中唯一的外部库是gson。
public class B {
   public void tryToPopulateList(List<Item> list) {
      list.add(new Item("something2"));
   }
B b = new B();
b.tryToPopulateList(myList);