Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果将ArrayList传递给对象的构造函数,它是通过引用还是通过值传递的?_Java_Arraylist - Fatal编程技术网

Java 如果将ArrayList传递给对象的构造函数,它是通过引用还是通过值传递的?

Java 如果将ArrayList传递给对象的构造函数,它是通过引用还是通过值传递的?,java,arraylist,Java,Arraylist,基本上和上面的问题相同,如果ArrayList被传递给对象的构造函数,它是通过引用还是通过值传递的 在下面的示例中,创建TickHistory对象并向其传递arraylist后,如果稍后更改传递的arraylist,它是否也会在TickHistory对象实例中发生更改 public class TickHistory { List<Tick> ticks; String period; String name; Integer year;

基本上和上面的问题相同,如果ArrayList被传递给对象的构造函数,它是通过引用还是通过值传递的

在下面的示例中,创建
TickHistory
对象并向其传递arraylist后,如果稍后更改传递的arraylist,它是否也会在TickHistory对象实例中发生更改

public class TickHistory {
    List<Tick> ticks;

    String period;
    String name;
    Integer year;


    public TickHistory(String name, String period, Integer year, List<Tick> ticks){
        this.name=name;
        this.period=period;
        this.year=year;
        this.ticks=ticks;
    }

}
公共类历史记录{
列出勾号;
串周期;
字符串名;
整数年;
公共历史记录(字符串名称、字符串周期、整数年、列表标记){
this.name=name;
这个周期=周期;
今年=年;
这个。滴答声=滴答声;
}
}
Java总是按值传递。不幸的是,他们决定打电话 指针引用,从而使新手感到困惑。因为那些参考资料 按值传递


您尝试过吗?您想要:this.ticks=new ArrayList(ticks);是的,谢谢。他们怎么说“按值传递”是非常令人困惑的,但实际上它并不像传递原语那样按值传递,而是像传递了对对象的引用一样。注意,新的数组列表将充满相同的对象。因此,如果您修改一个勾号,那么您将在两个列表中修改该勾号。但是,arraylist中对象的顺序是正确的。您根本无法传递arraylist对象,因为您无法获取它。(在C中没有像
*
这样的解引用操作符)在您的示例中,构造函数接受对arraylist的引用。因此,ta提出的一个更合理的问题是“对象引用是通过引用还是通过值传递的?”答案是,通过值传递的,就像javaok中的所有其他类型一样,这意味着如果我更改传递的arraylist,对象中的arraylist将不会更改?您想声明一个新的arraylist并用记号填充它。所以新的数组列表(ticks);也许我在这里工作,但传递给构造函数的arraylist与对象中的arraylist不同。将arraylist(值)传递给构造函数后,值将写入对象的arraylist(按值传递)。更改之前传递的arraylist不会更改对象中的arraylist。