首先来看结论:
1.通过调用一个方法无法改变一个基本类型的变量值
2.通过调用一个方法可以改变一个引用类型所指向对象的成员变量的值
再来看结论的另一种表达:
1.基本类作为形参传递的是变量的值
2.引用类型作为形参传递的是引用类型变量的值,即引用(指向特定对象的地址)
下面看分析:
1.严格来说,在Java中所有的参数都是值传递
1.1.对于基本类型变量来说,直接将该变量的值复制方法对应的局部变量
1.2.对于引用类型变量来说,也是直接将该变量的值复制到对应的局部变量
既然如此,两者造成的结果为什么会不同呢?看下面
2.原因是引用(地址)和一般数值的区别造成的
2.1.在函数体中对一般数值的任何操作都不会影响到外部的变量值
2.2.在函数体中的接收引用的局部引用类型变量相当于传入的引用指向的对象的另一个别名,用它对对象所在的任何改变都会真实地反应在指向的对象中