方法中的对象和原语

Eug*_*ene 0 java

请注意为什么用作方法参数的原语会在对象按原样使用时复制其值?

Jon*_*eet 6

在Java中,所有参数都是通过值传递的 - 但是在引用类型(即除了基元之外的所有内容)的情况下,变量的值不是对象本身 - 它是对象的引用.因此,该引用被复制到方法的参数中,因此它引用同一个对象.

请注意,这不仅适用于方法调用:

StringBuilder x = new StringBuilder();
StringBuilder y = x; // Copy the value of x, which is a *reference* 

y.append("Hello");
System.out.println(x); // Prints "Hello"
Run Code Online (Sandbox Code Playgroud)

在这里,xy引用相同的对象,即使它们是单独的变量.因此,当append通过y变量调用更改该对象的内容时,也可以通过x变量看到更改.

我认为这有点像给某人你家的地址:如果我给两个人我的家庭住址,其中一个把门涂成红色,那么当第二个人走进房子时,他们会看到红色门也是.我不是在给他们自己的房子,我给他们一个到我家的方式.

有许多关于此的文章 - 尽管不幸的是有些人会声称对象是通过Java引用传递的.他们不是 - 正如我上面所说,参考文献是按价值传递的.Scott Stanchfield 在其他许多文章中都有一篇很好的文章.