目录
前言
笔者在准备这个问题的时候,不但没有弄清楚这个问题的“答案”,反而还让自己的理解变得更乱。
折腾了一点时间,才对这个面试题有了一些自己的理解,发出来吐个槽,若理解有误,欢迎指正。
一、网上多数答案的套路
1、直接扔概念,告诉你什么是值传递,什么是引用传递
2、然后以【基本数据类型】为参数来举例子,证明Java 中的值传递
3、再以【引用数据类型】为参数来举例子,引出Java存在引用传递的错误理解。
4、接着以【String】为参数来举例子,证明引用数据类型也是值传递
5、从各种角度分析错误原因
6、得出结论:Java 只存在值传递
7、然后就没有然后了
(;′⌒`) 那到底 为什么Java 中只有值传递啊
二、看千篇一律的套路所产生的后果
我原本不知道【值传递】和【引用传递】这两个词
但是知道基本数据类型是复制一份值给参数,对于引用数据类型来说传递的值是引用。
然而。。。。。。。
第一次看完答案后,困惑:【Java 到底是值传递还是引用传递?】
再看第二遍,大悟:【Java 是值传递!】
梅开二度,困惑:【等等,我好像本来的理解就是这样的呀?】
梅开三度,困惑:【所以说,为什么Java 中只有值传递?】
简单来说,网上大多数的答案,不但没有解释 【为什么Java 中只有值传递】的问题。
反而在科普的过程中,有误导的嫌疑。
即你的理解原本是对的,只是不够透彻,被几个例子误导后,再被纠正,最后还没给出原问题的答案。。
最终结果就是,在知识学习和遗忘的迭代过程中,我们有可能没有通过【问题驱动】达到【巩固知识,加深理解】的目的,
存留下载的反而是更深的困惑(Java 是值传递还是引用传递来着?)
三、笔者对此问题的理解
先说结论,Java 中只有值传递。
1、【Java 中为什么只有值传递】这个问题是如何产生的?
笔者草草看了几篇博客,从零星的信息中猜测:
有的资料给的是错误结论,有的是自己理解错误,所以有相当一部分人认为
Java对于基本数据类型来说是值传递,对于引用数据类型来说是引用传递
所以这个问题想问的是:有部分人认为Java中存在引用传递和值传递,但是Java中只有值传递,这是为什么?
这个问题省略了背景,因此让一开始就接触正确概念的人很困惑(让人感觉答非所问)
说实话笔者最开始以为这个问题想问的是,Java运用值传递的【好处】【优点】之类的底层机制问题。。。。。
2、如何回答这个问题?
试试把问题换成【如何理解Java 中的值传递】
笔者能力也不足,言多必失,怕误导各位,这里只抛砖引玉。
概念:
值传递是指调用函数时将实际参数复制一份传递到函数中,这样在函数中对参数本身进行修改,将不会影响到实际参数。
(网上copyd的,“本身”二字是根据笔者自己的理解加上的)
1、对于基本数据类型来说,不赘述。
2、对于引用数据类型来说,形参本身是地址,修改形参的地址,实参是不会受到影响的。
但是如果通过形参去修改对象的属性,实参是会受影响的,这也是为什么笔者强调了参数本身。