章贡区建设局网站典型的c2c平台有哪些
2026/4/1 6:43:48 网站建设 项目流程
章贡区建设局网站,典型的c2c平台有哪些,做网站的基本条件,上海公司注册名字查询目录 一、什么是“值传递”与“引用传递”#xff1f; 值传递#xff08;Pass-by-Value#xff09; 引用传递#xff08;Pass-by-Reference#xff09; 二、Java 的真相#xff1a;一切都是值传递 关键理解#xff1a; 三、代码演示#xff1a;为什么说 Java 是值…目录一、什么是“值传递”与“引用传递”值传递Pass-by-Value引用传递Pass-by-Reference二、Java 的真相一切都是值传递关键理解三、代码演示为什么说 Java 是值传递场景1基本类型int场景2对象引用List场景3重新赋值引用关键测试四、图解内存模型视角五、常见误区澄清误区1“对象是引用传递”误区2“能修改对象内容 引用传递”六、如何真正“修改”调用方的引用方案1返回新对象推荐方案2使用包装类不推荐复杂方案3操作原对象内容“Java 中基本类型是值传递对象是引用传递” —— 这是一个流传甚广的误解。事实上Java 中所有参数传递都是值传递Pass-by-Value包括对象。本文将通过原理剖析、代码示例和常见误区澄清彻底讲清楚 Java 的参数传递机制。一、什么是“值传递”与“引用传递”值传递Pass-by-Value调用函数时将实参的值复制一份传给形参。函数内部对形参的任何修改不会影响原始实参。C 语言中基本类型就是典型的值传递。引用传递Pass-by-Reference调用函数时直接将实参的内存地址引用传给形参。函数内部对形参的修改会直接影响原始实参。C 中的引用参数就是引用传递。注意Java 没有引用传递二、Java 的真相一切都是值传递Java 的设计哲学非常明确“Java manipulates objects ‘by reference,’ but it passes references to methods ‘by value.’”——《Thinking in Java》翻译“Java 通过引用来操作对象但向方法传递引用时是按值传递的。”关键理解对象本身存储在堆内存中。变量如ListString list不是对象本身而是指向对象的引用可理解为地址。当你把list传给方法时传递的是这个“地址”的副本而不是地址本身。三、代码演示为什么说 Java 是值传递场景1基本类型intpublic static void main(String[] args) { int x 10; changeInt(x); System.out.println(x); // 输出10未改变 } static void changeInt(int num) { num 20; // 修改的是副本 }符合值传递副本修改不影响原值。场景2对象引用Listpublic static void main(String[] args) { ListString list new ArrayList(); list.add(A); changeList(list); System.out.println(list); // 输出[A, B] ← 内容变了 } static void changeList(ListString param) { param.add(B); // 修改对象内容 }看起来像“引用传递”其实不是list和param都指向同一个 ArrayList 对象。param.add(B)是修改对象的内容不是修改引用。这属于“通过引用修改对象”不是“引用传递”。场景3重新赋值引用关键测试public static void main(String[] args) { ListString list new ArrayList(); list.add(A); reassignList(list); System.out.println(list); // 输出[A] ← 完全没变 } static void reassignList(ListString param) { param new ArrayList(); // 让 param 指向新对象 param.add(X); param.add(Y); }这才是判断是否为引用传递的关键如果是引用传递list应该变成[X, Y]。但实际输出仍是[A]说明param ...只改变了局部变量的指向不影响调用方。这证明了Java 传递的是引用的值即地址的副本不是引用本身。四、图解内存模型视角五、常见误区澄清误区1“对象是引用传递”错对象本身不能被传递传递的是指向对象的引用的副本。正确说法“Java 通过值传递引用”。误区2“能修改对象内容 引用传递”错能修改内容是因为多个引用指向同一个对象与传递方式无关。即使是值传递只要共享同一个对象就能互相看到修改。六、如何真正“修改”调用方的引用虽然不能通过赋值改变调用方引用但有替代方案方案1返回新对象推荐ListString newList createNewList(); original newList; // 显式赋值方案2使用包装类不推荐复杂class RefT { T value; } void swap(RefListString ref) { ref.value new ArrayList(); }方案3操作原对象内容list.clear(); list.addAll(newData);

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询