1. 值传递(传值方式)
值传递是指将实际参数的值复制给形式参数,在方法内部对参数的修改不会影响到实际参数的值。
为什么需要值传递?
值传递的方式在 Java 中常用于基本数据类型的传递,因为基本数据类型的值通常较小且占用固定大小的内存空间,通过复制值的方式传递参数效率高,并且不会对原始数据造成影响。
值传递的使用示例
public void modifyValue(int num){ num=10; } int number=5; modifyValue(number); System.out.println(number); // 输出结果为5,因为num只是number的副本,在方法内修改不会改变原始值
值传递的优点
- 简单易懂,不容易出错。
- 不会对原始值造成影响,保护了数据的安全性。
值传递的缺点
- 当传递大对象时(如数组或自定义的对象),需要复制整个对象,会造成额外的内存消耗和性能损失。
值传递的使用注意事项
- 无法在方法内部通过值传递方式修改原始参数的值。
2. 引用传递(传址方式)
引用传递是指将实际参数的引用地址传递给形式参数,形式参数可以通过引用地址修改实际参数所指向的对象的值。
为什么需要引用传递?
引用传递的方式在 Java 中常用于对象的传递,因为对象通常较大且占用不固定大小的内存空间,通过传递引用地址的方式传递参数效率高,并且能够直接对对象进行修改。
引用传递的使用示例
public void modifyName(Person p){ p.setName("Bob"); } Person person=new Person("Alice"); modifyName(person); System.out.println(person.getName()); // 输出结果为"Bob",因为通过引用传递方式修改了person对象的名称
引用传递的优点
- 可以直接对对象进行修改,节省内存空间和时间开销。
引用传递的缺点
- 需要注意防止对引用地址进行误操作,可能导致不可预期的结果。
引用传递的使用注意事项
- 可以在方法内部通过引用传递方式修改原始参数所指向的对象的值。
3. 对象引用的副本传递
对象引用的副本传递方式是指将实际参数的对象引用副本复制给形式参数,在方法内通过引用副本修改对象的内容不会影响到实际参数指向的对象。
为什么需要对象引用的副本传递?
对象引用的副本传递方式在 Java 中常用于需要修改对象的某些属性,但不希望修改实际参数指向的对象的情况下使用。通过复制引用的方式传递参数可以避免对原始对象造成影响。
对象引用的副本传递的使用示例
public void appendText(StringBuilder sb){ sb.append(" World"); } StringBuilder sb=new StringBuilder("Hello"); appendText(new StringBuilder(sb)); // 将sb的引用副本传递给方法 System.out.println(sb.toString()); // 输出结果为"Hello",因为方法内修改的是引用副本的对象
对象引用的副本传递的优点
- 可以修改对象的部分属性,同时避免对实际参数指向的对象造成影响。
对象引用的副本传递的缺点
- 需要复制对象引用,造成额外的内存开销。
对象引用的副本传递的使用注意事项
- 在方法内修改的是引用副本的对象,不会改变实际参数指向的对象。
- 需要注意对象引用的副本传递可能导致额外的内存开销。
写在最后
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。[3]
学习建议
这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。
重点内容说三遍
不要死记硬背,每天复习,有个相关概念就行
不要死记硬背,每天复习,有个相关概念就行
不要死记硬背,每天复习,有个相关概念就行
关于价格
现在是限时优惠,随着参与人数的增加,价格会不断调整。
关注公众号并加我微信,备注 兑换码,就可以半价购买。
关于更新
文章会持续更新。每个月至少更新 100 篇 ✍️(˶ˆ꒳ˆ˵),于 2023 年 9 月 26 日正式发布。
关于我
欢迎关注我的博客 https://blog.zysicyj.top
如果你想加入交流群讨论技术,请加我微信,备注【交流群】,微信号是【sheng_chenyuanjie】。
不想付费?
你也可以关注我的微信公众号或者博客,所有的面试题都可以免费看到。
参考资料
[1]
首发博客地址: https://blog.zysicyj.top/
[2]全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。: https://store.amazingmemo.com/chapterDetail/1685324709017001
[3]全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java 面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。: https://store.amazingmemo.com/chapterDetail/1685324709017001
本文由 mdnice 多平台发布