黑马程序员技术交流社区
标题:
关于基本数据类型和应用数据类型的值参数传递问题
[打印本页]
作者:
周玉龙
时间:
2012-7-18 00:02
标题:
关于基本数据类型和应用数据类型的值参数传递问题
传递的是基本数据类型时,形参的改变对实参不影响。
传递的是引用数据类型时,形参的直接影响实参。
public class ReferenceType {
public void testPassByStirng(String param) {
param = "newValue";
}
public static void main(String[] args) {
String param = "value";
test.testPassByStirng(param);
System.out.println(param); // 结果是value ,而不是 newValue,为什么?String应该是引用数据类型,为什么他的形参的改变对实参也没有影响?
}
}
作者:
王龙彪
时间:
2012-7-18 00:10
String类的对象在内存中是不会变的
你的函数中给param赋值
本质上是在内存中新建了个字符串
然后再把原来的引用指向新生成的字符串
main()里的param的引用是没有变的
作者:
康大玮
时间:
2012-7-18 00:15
首先你的代码不对,如果你的代码对因为param是局部变量,你要理解作用域和生命周期
打个比方for(int i=0;i<10;i++){ ....} ,i就是局部变量它的作用域只是在for循环里面,它的生命周期等到for循环结束就终止。
作者:
乞文超
时间:
2012-7-18 00:41
java的参数传递都是以值的形式传递
如果是基本数据类型传递的就是数据本身int a=1 当调用 acv(a)时传进的就是1
如果是对象传导函数中的就是函数的内存地址而不是对象本身
相对于string类型 传进去的是string的一个引用
即生成一个指向原string内存地址的引用
此时两个引用都指向同一块内存
对这个引用重新赋值后就指向新的内存地址
但是主函数中的变量的指向地址是不变的
作者:
周坤
时间:
2012-7-18 01:19
java中方法调用的参数传递方式是传值,即方法调用不会改变调用程序中作为方法参数的变量的值。
public class ReferenceType {
public void testPassByStirng(String param) //
param为形参,作用域为这个方法里。
{
param="new value";//此时的param指向新的字符串"new value",但这并不会影响main()方法中的param。
}
public static void main(String[] args)
{
ReferenceType test=new ReferenceType();
String param = "value";
test.testPassByStirng(param); //
这个方法结束后,形参param就释放了,而主函数里的param指向的仍然是value。
System.out.println(param);//结果是value ,而不是 newValue,为什么?
因为引用传递,传递的是引用的地址,也就是value的地址。当改变时,只是形参对应的地址改变了,它随着方法体结束便释放了,而主函数的param依然指向原来的地址。
}
}
只有引用传递中,对指向的对象进行修改,比如改变对象成员变量的值,这种改变将是永久的改变。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2