为什么构造函数在Java中通过引用传递?

Sal*_*kci 1 java

在java中,所有方法都是按值传递的.但是今天我了解到构造函数是通过引用传递的.

// Attack the internals of a Period instance
Date start = new Date();
Date end = new Date();
Period p = new Period(start, end);
end.setYear(78);  // Modifies internals of p!
Run Code Online (Sandbox Code Playgroud)

这有效,并且能够编辑私有字段.

这个决定的原因是什么?还是我错过了什么?

A.H*_*.H. 8

你错了:

在java中,所有方法都是按值传递的.

相反:在Java中,所有参数都按值传递,甚至引用也按值传递.

您不"传递对象",只引用对象.方法和构造函数也是如此.

所以

end.setYear(78);  // Modifies internals of p!
Run Code Online (Sandbox Code Playgroud)

不会更改引用,只会更改引用指向的对象.