值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本, 并不是原对象本身 。
一般认为,Java 内的传递都是值传递.,Java 中实例对象的传递是引用传递,Java 是值传递的!
这是一个很经典的例子,我们希望在调用了 swap() 方法之后交换 arg1 和 arg2 的值,但事实上并没有,为什么会这样?
这就是因为 Java 是值传递的,也就是说,我们在调用一个需要传递参数的函数时,传递给函数的参数并不是我们传递进去的参数本身,而是它的一个副本,我们改变了数据其实只是改变了副本的数据而已,并不会对原来的参数有任何的改变。
我们自己定义了一个内部类 Person ,该类只有一个 int 类型的 age 属性,然后有 getter/setter ,我们希望通过 changeAge() 函数来改变 Person 对象的 age 属性,为什么这次成功了呢?
你依然可以理解为,主函数将 person 复制了一份到 changeAge 函数中去,最终还是只改变了 changeAge 中复制的那一份参数的值,而原本的参数并没有改变,但 changeAge 中的那一份和原本的参数指向了同一个内存区域!