Java方法涉及 :方法实参、方法形参、方法返回值。
这里着重分析一下Java方法参数,因为经常容易混淆。
Java 参数分基本类型与引用类型。
基本类型例子:
public class MethodChangeValue { private void changeValue(int pValue) { pValue = 5; } public static void main(String[] args) { MethodChangeValue test = new MethodChangeValue(); int value = 100; test.changeValue(value); System.out.println(value); } } /* output ~ 100 * */
下面再来看一个引用类型的例子:
public class MethodChangeReferenceValue { private void changStringReferenceValue(StringBuilder value) { value.delete(0, value.length()); value.append("new value"); } public static void main(String[] args) { MethodChangeReferenceValue test = new MethodChangeReferenceValue(); StringBuilder str = new StringBuilder("old value"); test.changStringReferenceValue(str); System.out.println(str); } } /* output ~ * new value * */
引用类型的参数都是达到以上的效果吗?下面来例子再看看另外一种情况
public class MethodChangeRefrence { private void changeStringReference(StringBuilder value) { value = new StringBuilder("new value"); } public static void main(String[] args) { MethodChangeRefrence testReference = new MethodChangeRefrence(); StringBuilder str = new StringBuilder("old value"); testReference.changeStringReference(str); System.out.println(str); } } /* output ~ * old value * */
其实方法传递的引用类型准确点说传递的是对象的引用地址的一个拷贝,changeStringReference方法传入的str引用与方法从形参获取到的value是在栈中保存的两份保存同一个str对象引用地址,所以在方法内value = new StringBuilder("new value"); 等于是针对形参value指向新创建的对象,引用保存新创建对象的内容地址。
参考资料:
《Thinking in Java 4》 2.5
《Java 核心技术基础卷》 4.5