You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么仅传入两个元素的swap方法无法交换Java数组的对应元素?

public class Utility {
    public static final <T> void swap(T a, T b) {
        T temp = a;
        a = b;
        b= temp;
    }
    
    public static final <T> void swapArr(T[] arr, int a, int b) {
        T temp = arr[a];
        arr[a] = arr[b];
        arr[b] = temp;
    }
}
问题解答

核心逻辑:Java 仅支持值传递,所有方法参数传递的都是值的副本

  • 调用Utility.swap(a[i], a[j])无法生效的原因
    调用该方法时,会把数组中a[i]、a[j]两个位置的取值复制为临时副本,传给swap方法的两个形参:

    如果数组存的是基本类型,副本就是数值本身;如果存的是引用类型,副本就是对象的内存地址值。
    方法内部交换的只是这两个局部副本的取值,完全不会修改原数组中存储的内容,方法执行结束后局部形参直接销毁,原数组没有任何变化。

  • 调用Utility.swapArr(arr, i, j)可以生效的原因
    调用该方法时,复制的是原数组对象的内存地址值作为副本传给形参arr,此时形参arr和外部的原数组指向堆内存中完全相同的数组对象。
    方法内部通过arr[a]、arr[b]修改的是该公共数组对象内部的元素存储值,修改结果会直接作用到原数组上,因此交换操作可以生效。

内容的提问来源于stack exchange,提问作者sxy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:36:05