学习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;
}
}
{
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 = 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");
}
}
{
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
修改对象后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");
}
}
{
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
修改对象之后aObject = Good
看到了,在这里,对象作为参数传递,这里传的又是“值”,因为函数没有将对象的成员的值改变,这点把我困惑了。查找资料,找到如下解释:
Java中对象作为参数传递时,是把对象在内存中的地址拷贝一份传递给了函数,如果在函数中修改了对象的成员的值,修改生效,函数调用结束后,成员的值为新值;如果把对象指向一个其它的对象,函数调用结束后,原来对象的引用并不指向新的对象,故在上段代码中,对象已经指向了新的对象,所以新值并不会作用到原来的对象上。
实际上,内存地址也是一个整数,在对象作为参数传递时,传内存地址的拷贝,实际上也算做传“值”。
转载于:https://blog.51cto.com/zhongw/106665