所以这是一个关于jvm设计的问题,因为从本质上讲Java是按值传递的,而实际上传递给方法的是对象的引用地址副本,那么为什么我们这样做而不是传递原始引用地址呢?这会在实践中造成麻烦吗?谢谢。
答案 0 :(得分:1)
首先,非常清楚,在Java中,所有内容都是按值传递(也称为按副本复制)。 其次,希望您很清楚,在JAVA中传递'References'并不意味着传递某种指针(如C语言),它只是意味着传递'reference variable'的COPY,该COPY存储存在于对象上的实际对象的地址。堆。
传递地址的副本而不是传递原始地址的副本,因为在JAVA中,由于某种原因(例如语言的简单性,封装(安全性)等)以及在JAVA中随处可见的原因,所有内容都是按副本传递的。
通过复制使语言更简单,在使函数签名变得更加可爱时,您不必考虑指针之类的东西。
此外,通过复制传递有助于封装,从而使语言更安全,因为此步骤使方法无法修改超出其自身范围的变量。
另一件事是引用(通过引用传递)可能会在语言中施加更多约束和规则。
-谢谢提问。