学习Java还是大学时,早已忘得只知道Java是SUN公司的开源编程语言了,当我想重新捡起来时,发现没东西可以从记忆里捡,后悔已是无用,还是踏实的拿起书,重新开始吧!
        今天看了关于Java参数传递的知识,把这些记下来,做为笔记,如果哪位大虾发现下面内容有问题,请一定给我指出,不能让我在错误的路上走下去,多谢啦!
 
 1、原始数据类型(primitive type)作为参数传递
根据资料显示,Java中原始数据类型传递时是 传值。实验一下,代码如下:
 
public class ParameterPassingAsPrimitiveType
{
         public static void main(String args[])
        {
                 int intType = 13;
                System.out.println( "修改原始类型参数值前:intType = " + intType);
                changeValue(intType);
                System.out.println( "修改原始类型参数值后:intType = " + intType);
        }
        
         public static void changeValue( int intType)
        {
                intType = 14;
        }
}
输出结果:
修改原始类型参数值前:intType = 13
修改原始类型参数值后:intType = 13
由此可以看出,传入的值是原始值(intType)的一个副本,在函数中修改了参数不会影响到原始值。
 
2、对象作为参数传递
先看代码:
public class ParameterPassingAsObject
{
         public static void main(String args[])
        {
                StringBuffer aObject = new StringBuffer( "Good");
                System.out.println( "修改对象前aObject = " + aObject);
                changValue(aObject);
                System.out.println( "修改对象后aObject = " + aObject);
        }
         public static void changValue(StringBuffer bObject)
        {
                bObject.append( " affternoon");
        }        
}
运行结果如下:
修改对象前aObject = Good
修改对象后aObject = Good affternoon
看输出,对象被修改了,可以被理解为传址(传引用)了?是否真是这样呢?看一下下面的代码再说:
public class ParameterPassingAsObjectOther
{
         public static void main(String args[])
        {
                StringBuffer aObject = new StringBuffer( "Good");
                System.out.println( "修改对象之前aObject = " + aObject);
                changeValue(aObject);
                System.out.println( "修改对象之后aObject = " + aObject);
        }
         public static void changeValue(StringBuffer bObject)
        {
                bObject = new StringBuffer( "new");
                bObject.append( " world");
        }
}
本段代码的运行结果:
修改对象之前aObject = Good
修改对象之后aObject = Good
看到了,在这里,对象作为参数传递,这里传的又是“值”,因为函数没有将对象的成员的值改变,这点把我困惑了。查找资料,找到如下解释: Java中对象作为参数传递时,是把对象在内存中的地址拷贝一份传递给了函数,如果在函数中修改了对象的成员的值,修改生效,函数调用结束后,成员的值为新值;如果把对象指向一个其它的对象,函数调用结束后,原来对象的引用并不指向新的对象,故在上段代码中,对象已经指向了新的对象,所以新值并不会作用到原来的对象上。
        实际上,内存地址也是一个整数,在对象作为参数传递时,传内存地址的拷贝,实际上也算做传“值”。