1. ChangeIt
方法1
class ChangeIt {
static void doIt(int[] z) {
z = null; // 将传入的数组引用改为 null
}
}
DiffCopyInsert
- 功能 :这个方法尝试将传入的数组引用
z
设置为null
。 - 效果 :修改仅仅是在方法的局部作用域内生效。因为在 Java 中参数是以值传递的(值是引用的副本),所以在方法外部调用
doIt
后,原始数组不会变为null
。 - 总结:这个方法实际上不会修改原数组,也不会影响外部调用者对数组的访问。
2. LowHighSwap
方法
class LowHighSwap {
static void doIt(int[] z) {
int temp = z[z.length - 1]; // 获取数组最后一个元素
z[z.length - 1] = z[0]; // 将第一个元素赋值给最后一个元素
z[0] = temp; // 将最后一个元素赋值给第一个元素
}
}
DiffCopyInsert
- 功能:这个方法交换传入数组的第一个元素和最后一个元素的值。
- 效果:方法修改了数组的内容,影响原始数组的实际值。因此,如果在外部调用这个方法,它将会改变原数组的内容。
- 总结:这个方法是有效的,能够直接通过操作数组的引用来修改原数组。
3. ChangeIt
方法2
class ChangeIt {
static void doIt(int[] z) {
int[] A = z; // 创建一个新数组引用 A,指向同一个数组
A[0] = 99; // 修改数组的第一个元素
}
}
DiffCopyInsert
- 功能 :这个方法通过将
z
赋值给新数组引用A
,然后修改A[0]
的值为99
。 - 效果 :虽然
A
是新的引用,但它仍然指向与z
相同的数组。因此,原数组的第一个元素会被成功修改为99
。 - 总结 :这个方法有效地修改了原数组,因为
A
和z
都引用相同的数组。
区别总结
-
参数修改:
- 第一个
ChangeIt
方法(z = null;
)不修改原数组,只改变了局部变量z
的引用。 LowHighSwap
方法修改了数组的元素,影响原数组内容。- 第二个
ChangeIt
方法通过创建新引用A
,也成功修改了原数组的内容。
- 第一个
-
操作性质:
- 第一个方法实现简单,不对原数组进行任何有效修改。
LowHighSwap
方法具有交换功能,直接影响数据。- 第二个
ChangeIt
方法修改数组的内容,通过改变引用的方式来实现。
-
对原数组的影响:
- 第一个方法对原数组没有影响。
- 第二个和第三个方法都会对原数组造成影响,只是实现方式不同(交换与赋值)。
总的来说,只有在 LowHighSwap
和第二个 ChangeIt
方法中,才能有效地通过引用修改传入的数组内容,而第一个 ChangeIt
方法的修改在调用之后对原数组没有任何影响。