【发布时间】:2015-06-08 01:59:38
【问题描述】:
假设给定数组实例化如下: int[] 给定 = {1, 2, 3, 4, 5};
这些方法应该改变数组并显示打印结果。
public int[] change(int[] given) {
out.println(Arrays.toString(given)); //before-changes
whatIsGoingOn(given); //make changes
out.println(Arrays.toString(given));//after changes
return given; //return the supposedly changed array
}
//Make changes:
public void whatIsGoingOn(int[] given) {
given = new int[5];
given[0] = 200;
}
我认为问题在于 void 方法,它会覆盖给定 int[] 的原始值,但新的初始化和声明永远不会出现。
我希望数组是:
{200, 0, 0, 0, 0};
但是 Java 会打印出来:
{1, 2, 3, 4, 5}
{1, 2, 3, 4, 5}
但在我在 whatIsGoingOnMethod 中返回一个新更改的数组的情况下,我得到了我想要的结果:
{1, 2, 3, 4, 5}
{200, 0, 0, 0, 0}
如果 void 方法只是做了一些事情并且它并没有像我期望的那样真正被“应用”。对此我将不胜感激。
这个问题已经回答了,谢谢!!! 我需要冷冻它。
【问题讨论】:
-
数组按值传递
-
你必须阅读这篇关于 Java pass by value - stackoverflow.com/questions/40480/…
-
因为 java 是按值传递的。
-
@spiderman 好的,我看看。