网站首页 > java教程 正文
在遥远的神界,有两个神族——值族和引用族。他们因为一个古老的问题,几千年来争论不休:在凡间传递数据时,究竟是用值的方式还是用引用的方式呢? 为了弄清楚,天帝玉皇大帝特意请来了智慧无双的传参之神——“Java老神仙”来给大家讲明白这个天大的谜题。
第一幕:值族的“镜像术”
值族的族长名叫“基本类型之神”。他豪爽无比,行事简单直接。老神仙刚一出场,值族的族长便上前一步,用威风的嗓音说道:“传递就是镜像术!我只给你们我的影子,不可能影响到我的本体!”
说罢,他挥手召唤出自己的影子,把影子递给众神围观的仙子们观看。果然,这影子看起来和本尊几乎一模一样,和他同样身姿挺拔,气宇轩昂。但是当一位好奇的仙子往影子上加了个小记号,族长本人却依旧完好无损,丝毫没有被改变。
值族族长解释道:“这就是我们值传递的原理。我们给凡间的,只是一个镜像!凡人可以随意修改镜像,但对我的本体毫无影响。”
第二幕:引用族的“灵犀术”
轮到引用族的神来展示他们的传递方式了。这位是灵活机敏的“引用类型之神”,她施展出了另一门法术——灵犀术。只见她召唤出一根银色的丝线,丝线的另一端连着一个小人偶。
她轻轻拉动丝线,灵活的小人偶就跟着她动了起来。“这就是我们的传递方式——‘引用传递’!”引用族的神得意地说,“凡人们得到的不是我的镜像,而是这根牵连的‘灵犀丝’。只要他们沿着这根丝线去控制,就能直接影响我这个人偶。”
仙子们纷纷点头称赞,见证了这神奇的灵犀术。但一位聪慧的小仙女突然问:“可是,如果我想换个人偶,或换根丝线呢?”
引用类型之神微微一笑,悠悠地说道:“凡人拿到的只是我提供的丝线的方向,无法改变本体和丝线的连接。我可以把内容修改得面目全非,但丝线头的位置不会变。这就是灵犀术的妙用——他们拿到的是指向的地址值,不是本体。”
大结局:Java老神仙的终极解释
看到大家依然有些疑惑,传参之神 Java 老神仙站了出来,拿起法杖,化出一块镜子,镜中浮现出凡间程序员们写的代码:
public class PassExample {
public static void main(String[] args) {
Dog aDog = new Dog("Rover");
System.out.println("初始名字:" + aDog.getName()); // Rover
changeDogName(aDog);
System.out.println("最终名字:" + aDog.getName()); // Max
}
public static void changeDogName(Dog dog) {
dog.setName("Max"); // 修改对象内容
}
}
老神仙微笑道:“在凡间编程语言中,Java所有的数据传递其实都是值传递。这句话怎么讲呢?简单来说,无论是值族的镜像,还是引用族的灵犀丝,最终都是把‘值’传给对方。”
他看向引用族:“你们传递的值,是指向对象的地址值,凡人可以通过地址值操控内容,但不能换掉这个‘灵犀丝’指向的对象。”
老神仙拍了拍法杖,说:“所以说,Java 的所有传参都是值传递。如果是基础类型,传递的是数值本身;而引用类型,传递的是对象的地址值。你们明白了吗?”
众仙恍然大悟,纷纷叩谢 Java 老神仙。至此,凡间程序员们对于 Java 的传参之谜,终于有了真正的答案。
猜你喜欢
- 2024-11-11 挨个举例子告诉你Java中的参数传递,我就不信你还不明白了
- 2024-11-11 Java值传递机制(java传值方式)
- 2024-11-11 Java面试-为什么 Java 只有值传递?
- 2024-11-11 Stack Overflow上188W+程序员都关注的问题
- 2024-11-11 为什么说Java不存在引用传递?(javax不存在)
- 2024-11-11 一份2021年的java面试题(java常见面试题)
- 2024-11-11 互联网大厂面试系列-为什么说在Java方法参数调用只有值传递呢?
- 2024-11-11 一文搞懂参数传递原理(参数传递的三种方式)
- 2024-11-11 Java程序员想年后跳槽,对JVM没有深入的理解,我劝你还是别跳了
- 2024-11-11 JAVA校招题基础知识点复习第二天(引用传递的本质是什么?)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)