你的理解是对的,对象是传递了一个引用过去,可以修改对象。
基本数据类型是直接传递数值本身过去,也就是拷贝了一份。按值调用的工作原理:不论传递给方法的实参是什么类型,相关的形式参数都会得到该数据的一份拷贝。
假如我们想给方法的数据是一个很大的对象,那么请记住:不是对象被传入,而是对象的引用被传入
你可以理解成:基本数据类型是按值传递的,而对象不是。关于这种传值传参的问题,楼主有一个自己的理解,保证程序正确运行就可以了。论坛里很多逼格很高的人会说各种java都是传值之类的,你不用管,那些理论家的工作,作为一个实干家,保证程序正确运行是唯一准则。
基本数据类型是直接传递数值本身过去,也就是拷贝了一份。按值调用的工作原理:不论传递给方法的实参是什么类型,相关的形式参数都会得到该数据的一份拷贝。
假如我们想给方法的数据是一个很大的对象,那么请记住:不是对象被传入,而是对象的引用被传入
你可以理解成:基本数据类型是按值传递的,而对象不是。关于这种传值传参的问题,楼主有一个自己的理解,保证程序正确运行就可以了。论坛里很多逼格很高的人会说各种java都是传值之类的,你不用管,那些理论家的工作,作为一个实干家,保证程序正确运行是唯一准则。
http://pan.baidu.com/share/link?shareid=3114749527&uk=3826102641&fid=142193192原书内容图文并茂,还有代码示例,应该很好理解了再参考一下下面的代码:public class ParameterTest { public static void main(final String[] args) {
String parameterA = "A";
String parameterB = "B"; System.out.println("Before");
System.out.println(" parameterA:" + parameterA);
System.out.println(" parameterB:" + parameterB); swapString(parameterA, parameterB); System.out.println("After Swap");
System.out.println(" parameterA:" + parameterA);
System.out.println(" parameterB:" + parameterB); changeString(parameterA);
changeString(parameterB); System.out.println("After Change");
System.out.println(" parameterA:" + parameterA);
System.out.println(" parameterB:" + parameterB);
} public static void swapString(String parameterLeft, String parameterRight) {
String swapString = parameterLeft;
parameterLeft = parameterRight;
parameterRight = swapString;
} public static void changeString(String parameterString) {
parameterString = "C";
}
}
输出(按下Ctrl+A可以看见):
Before
parameterA:A
parameterB:B
After Swap
parameterA:A
parameterB:B
After Change
parameterA:A
parameterB:B
1)方法不能修改一个基本数据类型(比如基本数据类型和布尔型)的参数。
2)方法可以改变一个对象参数的状态。
3)方法不能实现让对象参数引用一个新的对象。2)应该就是你所说的“数据可以被改变”,
这个认识是正确的,数据确实可以被改变。那么,为什么会有Java都是传值的说法,请参考2楼提示的书的内容。
为了方便理解,我在图上追加了一些注释,供参考。
至于你为什么会一直“迷惑”,建议对照翻译前的英文原版的内容看,估计会好一些。