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

标签 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!

这有效并且能够编辑私有(private)字段。

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

最佳答案

你错了:

In java all methods are pass by value.

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

您不“传递对象”,只传递对对象的引用。对于方法和构造函数也是如此。

所以

end.setYear(78);  // Modifies internals of p!

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

关于java - 为什么构造函数在 Java 中通过引用传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17628677/

相关文章:

java - 从谷歌静态 map 中的像素坐标获取经/纬度

java - 如果输出重定向到文件或显示到控制台,则相应地动态格式化输出

JAVA 打印堆转储

java - 读取 JSON 时值不存在

java - 是否有关于使用套接字与 Google App Engine for Java 服务进行客户端/服务器连接的教程?

java - 发送 HTTP POST 请求时方法签名无效

java - Springboot : Callback URL not approved for this client application. 可以在应用程序设置中调整批准的回调 URL 吗?

java - java中无效的日期时间格式

java - ORMLite 可以与服务器一起使用吗?

Java Socket 监听 PHP 客户端不工作