Java 数组 - 来自测试

标签 java

在我的 Java 测试中是下一个问题:

there is the next method:

public void changer(int[] x, int y) {

    x[y] = x[y] +3;
    y = y * 2;
}

我们有一个名为 a 的数组,其值为:

2,4,0,1,-6,3,8,7,5

如果 b = 3

下一次调用后 a 和 b 的值是多少:

changer(a,b);

我的回答是: b = 6

a = 2,4,0,4,-6,3,8,7,5

我在 BlueJ 上测试过,得到了相同的答案,但测试人员写道:错了!

你说呢?

最佳答案

你对数组值的看法是对的,但对 b 值的看法是错误的。

当你调用一个方法时,java 按值传递所有东西,这意味着改变 y 只会改变局部的值,而改变不会反射(reflect)在 b 上。

但是,当传递数组和对象时,传递的是一个表示数组指针的值。这意味着 x = new int[8] 根本不会改变 a,因为当它发生在 y 时,变化不会反射(reflect)到 a。但是,更改数组成员或对象属性会如您预期的那样工作,导致 a 和 x 都指向内存中的同一个数组。

关于Java 数组 - 来自测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7351084/

相关文章:

JavaFx PerspectiveCamera - fixedEyeAtCameraZero 标志 - 当为真时,所有对象都会消失

JavaFx TableView 列不填充 TableView 宽度

java - Java Appengine 中的 JODA 时间

java - Jersey SSE 客户端未接收到事件

java - android - 如何排序 List<Map<String, String>>

java - 在java中表示日期的最佳方式

java - maven pom.xml 提示执行无法解析依赖关系但功能正常

java - 创建具有多种数据类型的 Java 数组时出错

java - 如何修改 HTML JLabel 以使用小于 8k 的缓冲区?

javascript - 使用 Java Selenium JavascriptExecutor 访问 AngularJS 变量