你的理解是对的,对象是传递了一个引用过去,可以修改对象。
基本数据类型是直接传递数值本身过去,也就是拷贝了一份。按值调用的工作原理:不论传递给方法的实参是什么类型,相关的形式参数都会得到该数据的一份拷贝。
假如我们想给方法的数据是一个很大的对象,那么请记住:不是对象被传入,而是对象的引用被传入

你可以理解成:基本数据类型是按值传递的,而对象不是。关于这种传值传参的问题,楼主有一个自己的理解,保证程序正确运行就可以了。论坛里很多逼格很高的人会说各种java都是传值之类的,你不用管,那些理论家的工作,作为一个实干家,保证程序正确运行是唯一准则。

解决方案 »

  1.   

    建议阅读一下,下面的PDF文档的129页至134(原书115页至120页)的【4.5 方法参数】章节
    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
      

  2.   

    Java方法参数的总结:
    1)方法不能修改一个基本数据类型(比如基本数据类型和布尔型)的参数。
    2)方法可以改变一个对象参数的状态。
    3)方法不能实现让对象参数引用一个新的对象。2)应该就是你所说的“数据可以被改变”,
    这个认识是正确的,数据确实可以被改变。那么,为什么会有Java都是传值的说法,请参考2楼提示的书的内容。
    为了方便理解,我在图上追加了一些注释,供参考。
    至于你为什么会一直“迷惑”,建议对照翻译前的英文原版的内容看,估计会好一些。