Java中char数组传入reverseArray方法后未被修改的原因是什么?
问题根因
你对Java数组参数传递的认知是正确的:Java中数组属于引用类型,方法形参拿到的是原数组的堆内存地址引用,方法内对数组元素的修改会直接作用到原数组上。你遇到的两次输出一致的问题,完全是reverseArray方法的循环逻辑错误导致的。
你的循环遍历了整个数组的全部索引,相当于把每对元素交换了两次:
- 以你测试用的长度为6的数组为例:
- i=0时交换索引0和5,i=5时又会交换索引5和0,两次交换后元素回到原位
- i=1时交换索引1和4,i=4时又会交换索引4和1,元素复原
- i=2时交换索引2和3,i=3时又会交换索引3和2,元素复原
全部循环执行完成后,数组等于被反转了两次,最终回到初始状态,因此两次打印结果一致。
修复方案
只需要将循环的终止条件修改为遍历数组前半段即可,避免重复交换:
public static void reverseArray(char[] tabCar){ int lastPlace = tabCar.length - 1; // 终止条件改为i < 数组长度的一半 for(int i = 0 ; i < tabCar.length / 2 ; i++){ char tempChar = tabCar[i]; tabCar[i] = tabCar[lastPlace - i]; tabCar[lastPlace - i] = tempChar; } } public static void main(String[] args) { char[] charArray = {'a','b','c','d','e','f'}; System.out.println("Before reverseArray : " + Arrays.toString(charArray)); reverseArray(charArray); System.out.println("After reverseArray : " + Arrays.toString(charArray)); }
修改后执行测试代码,就能得到预期的反转结果:
Before reverseArray : [a, b, c, d, e, f] After reverseArray : [f, e, d, c, b, a]
内容的提问来源于stack exchange,提问作者user10734354
相关产品推荐
相关产品推荐

