啥也不说上来先看一下总结:
一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
一个方法可以改变一个对象参数的状态。
一个方法不能让对象参数引用一个新的对象。
针对这3条,我们先来看几个demo,请自行先猜测一下输出结果。
输出:是5,不是6,也就是你只是拿着我的副本,随便你玩,你大爷还是你大爷。
输出:0。为啥不是1呢?刚才你不是说传递的是副本嘛随便我怎么玩,这回怎么把我的原件给改了啊?
其实大家可以这么理解,你把arr看成一个水缸,我把水缸借给你玩,你可以往里面给我装沙子,也可以装石头,随便你玩,只要我的缸还是我的缸就行。
好,我们来看最后一个demo。
这题的输出是什么呢?
其实这题输出的是 1 。这里我们借着上一题的比喻来想,我借给你一口大缸,可能是金的哈,你倒好,直接换给我一口铁缸,那我肯定不干啊是不是。所以他(java)这里也不干,我还是取得是自己的缸里的东西。
好我们回过头去,重新理解一下我们一开始的总结。
一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
一个方法可以改变一个对象参数的状态。
一个方法不能让对象参数引用一个新的对象。
其实我们比喻的缸其实指的就是对象,当我们传递的参数为对象的时候可以改变对象里面状态,但是不能将对象参数替换为一个新的对象。
有人会说你说了这么多,我都懂 但是JAVA到底是值传递还是引用传递呢?
首先纠正一个错误理解:值传递和引用传递区分条件是传递的内容,如果是个值,就是值传递,如果是个引用就是引用传递。
敲黑板,让我们看一下在百度百科里对这两个概念的正确解释:
当我们有了正确的概念,再结合我刚才举的例子,我们可以得出的答案就是 java应用的是值传递