Java 修改后是否需要在方法中将arraylist指定为返回类型?

Java 修改后是否需要在方法中将arraylist指定为返回类型?,java,arraylist,Java,Arraylist,我想知道返回“更新的”ArrayList的最佳实践是什么 例如,如果我正在添加一个新元素,那么无论我是否指定了返回类型(请参见addNewA()和addNewB()),我的main()方法中的ArrayList似乎仍将“更新” 我是否应该指定返回类型? 目前,在我的客户机程序中,大多数方法,我都将其指定为void(无返回类型),虽然整个程序仍按预期工作,但我想澄清这一点,并在必要时进行必要的更改 public class MyClient { public static ArrayLis

我想知道返回“更新的”
ArrayList
的最佳实践是什么

例如,如果我正在添加一个新元素,那么无论我是否指定了返回类型(请参见
addNewA()
addNewB()
),我的
main()
方法中的
ArrayList
似乎仍将“更新”

我是否应该指定返回类型? 目前,在我的客户机程序中,大多数方法,我都将其指定为
void
(无返回类型),虽然整个程序仍按预期工作,但我想澄清这一点,并在必要时进行必要的更改

public class MyClient
{
    public static ArrayList<Person> addNewA(ArrayList<Person> myArray)
    {
        Person jack = new Person("jack", 24);
        myArray.add(jack);
        return myArray;
    }

    public static void addNewB(ArrayList<Person> myArray)
    {
        Person ben= new Person("ben", 19);
        myArray.add(ben);
    }

    public static void main(String[] args)
    {
        ArrayList<Person> personArray= new ArrayList();
        addNewA(personArray); // will return me an array size of 1
        addNewB(personArray); // will return me an array size of 2
    }
}
公共类MyClient
{
公共静态ArrayList addNewA(ArrayList myArray)
{
人杰克=新人(“杰克”,24);
myArray.add(jack);
返回myArray;
}
公共静态void addNewB(ArrayList myArray)
{
人本=新人(“本”,19);
myArray.add(ben);
}
公共静态void main(字符串[]args)
{
ArrayList personArray=新的ArrayList();
addNewA(personArray);//将返回1的数组大小
addNewB(personArray);//将返回大小为2的数组
}
}
在java(和大多数高级严格类型语言)中,
对象
通过
引用
传递,原语通过
传递

使用
new
关键字时,您将创建一个对象

虽然原语(如
int
char
double
ect)是按值传递的(这意味着变量值的副本将被发送到调用的函数),但对象类型是按引用传递的,这意味着实际的原始对象被传递到函数

总之,由于您在这里使用对象(
ArrayList
),您不需要返回类型,因为原始对象正在更改。

在这种情况下,您不应该返回列表,应该使您的方法
无效

不同的语言有不同的约定,但Java的约定之一是,通过修改参数(或调用它们的对象)进行操作的方法不应返回值。返回值意味着使用您的代码的人将返回另一个对象,因为否则返回调用方已经拥有的对象是没有用的1。另一方面,
void
方法不可能返回复制和扩展的列表,因此很明显,它的目的是通过修改您首先给出的列表来操作

(顺便说一下,您应该注意关于使用
new ArrayList()
而不是
new ArrayList()
的警告)



1有一个特殊的例外,称为fluent builder模式,但它不容易与这样的常规代码混淆。

谢谢您的回复。它在
列表中清晰可见
谢谢,并在对象和基本类型中注明!