引用变量与把参数传递给方法
基本类型的变量与对象变量(引用类型)之间在方法的参数传递方面有着本质的不同。基本类型变量传递的是值(按值传递),而对象变量传递的是引用(按引用传递)。
“按值传递”意味着参数的值被复制,然后传递到方法中。在方法中,如果愿意,这个副本可以被修改,而不会影响原始的参数。
“按引用传递”意味着把一个参数引用传递给方法。利用这个引用,方法实际上是在直接访问参数,而不是复制它。方法对参数所做的任何改动直接施加到作为参数的实际对象。从方法中返回之后,该对象将继续保持对方中已经设置的任何新值。
实际上,这里仍然是把引用一个对象参数的变量值的副本传递给方法。这就是为什么某些Java书籍(使人误解地)讲:“所有方法调用都是按值传递的。”对象引用的副本按值传递,而实际上还是按引用传递了对象本身。
其中的一个主要差别是,利用“按值传递的引用”(像Java中那样),将无法利用参数进行任何操作,以改变原始参数指向的位置。利用真正的“按引用传递”,对象参数的赋值将引起原是参数也同时发生变化。在Java中,方法可以改变对象参数中的内容,但不能改变它是哪一个对象。