实际上,在java代码执行的过程中只有值的传递。
只是!
- 对于基本数据类型来说,直接传递值。(给了一份一样的数据)
- 对于引用数据类型来说(对象,字符串,数组),传递的是地址。(给了一个一样的地址)
所以,我说的是值的传递。
那么值传递和引用传递的概念就可以区分了。
举个栗子:
- main方法执行,Example类实例化,那么 str 和 ch 被加载
- 但是,遇到了 exchange 方法,此时!!注意了!!:exchange 方法中的两个参数是形参,作用范围只在 exchange 这个方法中。这两个参数得到了那两个参数的地址(应该好理解吧🤭)。则 str 和 ch 有了对象
- 然后这个 str 指向了新的 "test ok",因为 string 的特性,会生成新的字符串对象,str 拿到新对象的地址。这个 ch 通过地址拿到了对象,把对象{'a','b','c')}这个数组的第一个值给改了。
- 方法执行结束,形参消失,"test ok"被垃圾回收。这时只剩下作用范围为这个类的 str 和 ch ,以及她们指向的对象。
总结:JAVA中只有值的传递,要准确分清对象中到底存的是什么,以及到底改变的是什,以及变量的作用域的问题。