数组 三种操作方法的对比

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
  • 总结 :这个方法有效地修改了原数组,因为 Az 都引用相同的数组。

区别总结

  1. 参数修改

    • 第一个 ChangeIt 方法(z = null;)不修改原数组,只改变了局部变量 z 的引用。
    • LowHighSwap 方法修改了数组的元素,影响原数组内容。
    • 第二个 ChangeIt 方法通过创建新引用 A,也成功修改了原数组的内容。
  2. 操作性质

    • 第一个方法实现简单,不对原数组进行任何有效修改。
    • LowHighSwap 方法具有交换功能,直接影响数据。
    • 第二个 ChangeIt 方法修改数组的内容,通过改变引用的方式来实现。
  3. 对原数组的影响

    • 第一个方法对原数组没有影响。
    • 第二个和第三个方法都会对原数组造成影响,只是实现方式不同(交换与赋值)。

总的来说,只有在 LowHighSwap 和第二个 ChangeIt 方法中,才能有效地通过引用修改传入的数组内容,而第一个 ChangeIt 方法的修改在调用之后对原数组没有任何影响。

相关推荐
睡不醒的kun12 分钟前
定长滑动窗口-基础篇(2)
数据结构·c++·算法·leetcode·职场和发展·滑动窗口·定长滑动窗口
庄小焱25 分钟前
【机器学习】——房屋销售价格预测实战
人工智能·算法·机器学习·预测模型
黎雁·泠崖25 分钟前
Java字符串高阶:底层原理深剖+经典面试题全解
java·开发语言
txzrxz31 分钟前
单调栈详解(含题目)
数据结构·c++·算法·前缀和·单调栈
重生之我是Java开发战士33 分钟前
【Java SE】反射、枚举与Lambda表达式
java·开发语言
weixin_4365250736 分钟前
若依多租户版 - @ApiEncrypt, api接口加密
java·开发语言
Hello.Reader43 分钟前
Flink Java 版本兼容性与 JDK 模块化(Jigsaw)踩坑11 / 17 / 21 怎么选、怎么配、怎么稳
java·大数据·flink
AI科技星44 分钟前
张祥前统一场论的数学表述与概念梳理:从几何公设到统一场方程
人工智能·线性代数·算法·机器学习·矩阵·数据挖掘
TechPioneer_lp1 小时前
小红书后端实习一面|1小时高强度技术追问实录
java·后端·面试·个人开发
程序员-King.1 小时前
day167—递归—二叉树的直径(LeetCode-543)
算法·leetcode·深度优先·递归