参数传递给静态方法

时间:2013-12-26 16:32:12

标签: java static-methods

enter image description here

我这个代码,输出是6,但我认为它应该是4

为什么输出是6

6 个答案:

答案 0 :(得分:1)

没有。你的假设是错误的。

您正在将数组传递给修改那里的方法,因此指向相同引用和值的数组已被更改。

如果a是一个原语,那么它没有引用,并且传递给方法的复制值和原始值保持不变。

System.out.println(a+array[0]);
// a is still 1 and array madofied in method which is 5. so 1+5

简而言之:

  • 将基元传递给方法时,更改不会生效 原始变量。

  • 将对象(此处为数组)传递给方法时,更改效果
    到原始对象,因为他们指向相同的参考。

答案 1 :(得分:1)

这是使用调试器回答这个问题的地方,但简而言之,你有

int a = 1;
// inside f()
// a = 4 doesn't change the value of a in main()
array[0] = 5;

所以a + array[0]1 + 56

答案 2 :(得分:1)

这是因为int数组不是Java中的本机类型,而是Object。

因此,当您调用方法f()时,该方法接收变量a的副本和指向int数组的指针的副本。更改数组内部的值时,您正在修改其接收的指针所引用的对象。但是当你改变a的值时,你只需要修改一个。

的副本

答案 3 :(得分:0)

a将作为值的副本传递,而数组将作为引用的副本传递。因此,当您修改可以使用该引用访问的内容时,您可以修改实际的数组。而对于a,您只是修改副本的值,而不会修改原始的。

答案 4 :(得分:0)

在这种情况下,f()中的 a 是通过方法调用传递的值的本地副本。在f()到 a 中执行某些操作不会更改main()中的 a 。另一方面,当您将 array 传递给f()时,您将传递对名为 array 的数组对象的引用。因此,两个数组名称都指向相同的底层对象,并且更改该对象将更改每个数组引用所指向的内容。

答案 5 :(得分:0)

Java中的数组也是按值传递的对象,不通过引用传递。

就像任何其他类对象一样,当一个数组传递给另一个方法时,该方法仍然可以改变数组本身的内容。但是,传递给该方法的是参考地址的 副本,该副本指向数组对象

请看一下上面的示例 - 相同的原则适用于数组,因为它们是Java中的对象,并且是按值传递的。