为什么java中方法的参数接受引用的副本';地址?

为什么java中方法的参数接受引用的副本';地址?,java,jvm,Java,Jvm,这是一个关于jvm设计的问题,因为java基本上是按值传递的,实际上传递到方法中的是对象的引用地址副本,那么为什么我们不传递源引用地址而这样做呢?这在实践中会引起麻烦吗?谢谢。首先,要非常清楚,在JAVA中,一切都是按值传递的(也称为按副本传递)。 其次,希望您非常清楚,在JAVA中传递“引用”并不意味着传递某种指针(如在C中),它只意味着传递存储堆上实际对象地址的“引用变量”副本 传递地址的副本而不是传递原始地址,因为在JAVA中,由于语言的简单性、封装(安全性)等原因,所有内容都是按副本传递

这是一个关于jvm设计的问题,因为java基本上是按值传递的,实际上传递到方法中的是对象的引用地址副本,那么为什么我们不传递源引用地址而这样做呢?这在实践中会引起麻烦吗?谢谢。

首先,要非常清楚,在JAVA中,一切都是按值传递的(也称为按副本传递)。 其次,希望您非常清楚,在JAVA中传递“引用”并不意味着传递某种指针(如在C中),它只意味着传递存储堆上实际对象地址的“引用变量”副本

传递地址的副本而不是传递原始地址,因为在JAVA中,由于语言的简单性、封装(安全性)等原因,所有内容都是按副本传递的,JAVA中的任何地方都会遵循这种方式

通过复制使语言变得更简单,在对函数进行签名时,不必考虑指针之类的东西,这使语言更可爱

此外,Pass-by-copy有助于封装,使语言更加安全,因为这一步骤使方法无法修改其自身范围之外的变量

还有一件事是引用(通过引用传递)可能会在语言中施加更多的约束和规则


--谢谢你的提问。

它们是两种不同的东西,有两种不同的语义。你还想知道什么?我不太明白这个问题。您是否在问为什么没有为
foo(x)
提供
x
指向的对象的地址?简单的回答是:这正是它所给出的。或者您是在问为什么没有为变量
x
本身提供地址?这将是通过引用传递的(Java不这样做,如果您只想访问
x
所指向的对象,那么效率也很低——为什么需要额外的间接寻址)。“数字副本”没有意义。1234和“1234的副本”有什么区别?这是同一组位。