Java方法的参数传递
publicclassTest{publicstaticvoidswap(DataWrapdw){inttmp=dw.a;dw.a=dw.b;dw.b=tmp;Syste...
public class Test{
public static void swap(DataWrap dw){
int tmp=dw.a;
dw.a=dw.b;
dw.b=tmp;
System.out.println("swap方法里,a 的属性值是"+dw.a+"; b的值是"+dw.b);
}
public static void main(String[] args){
DataWrap dw=new DataWrap();
dw.a=1;
dw.b=2;
swap(dw);
System.out.println("交换之后a 的值是:"+dw.a+";b的值是"+dw.b);
}
}
--------------------------------------------------------------------------------------------------------
上面程序中引用的DataWrap类为:
public class DataWrap{
public int a;
public intb;
}
-----------------------------------------------------------------------------------------------
1。创建一个Test类;
2。定义一个方法swap,形参为(DataWrap dw),在方法中交换了a和b的值,并输出;
3。进入main方法,创建一个实例dw,并为dw实例属性a和b分别赋值1和2,;
4。把实例dw作为形参传入swap方法,并执行swap方法,输出a=2,b=1;
5。分别输出执行swap方法后a和b的值,得到 a=2,b=1;
--------------------------------------------------------------------------------------------------
我的疑问是:
1。在这个程序里,实例dw在执行swap方法后a和b的值发生了变化,这说明方法参数传递的是实例本身;
2。在swap方法的最后一句加上 dw=null;swap(dw)仍然输出b=2,a=1,这说明方法swap中的dw=null 改变的是dw的副本。也就是说方法参数传递的是副本;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
矛盾ing!希望有识之士能指出其中错误!
我说的是在swap方法块内System输出后再加上一句dw-=null如下
public static void main(String[] args){
DataWrap dw=new DataWrap();
dw.a=1;
dw.b=2;
swap(dw);
System.out.println("交换之后a 的值是:"+dw.a+";b的值是"+dw.b);
dw=null
} 展开
public static void swap(DataWrap dw){
int tmp=dw.a;
dw.a=dw.b;
dw.b=tmp;
System.out.println("swap方法里,a 的属性值是"+dw.a+"; b的值是"+dw.b);
}
public static void main(String[] args){
DataWrap dw=new DataWrap();
dw.a=1;
dw.b=2;
swap(dw);
System.out.println("交换之后a 的值是:"+dw.a+";b的值是"+dw.b);
}
}
--------------------------------------------------------------------------------------------------------
上面程序中引用的DataWrap类为:
public class DataWrap{
public int a;
public intb;
}
-----------------------------------------------------------------------------------------------
1。创建一个Test类;
2。定义一个方法swap,形参为(DataWrap dw),在方法中交换了a和b的值,并输出;
3。进入main方法,创建一个实例dw,并为dw实例属性a和b分别赋值1和2,;
4。把实例dw作为形参传入swap方法,并执行swap方法,输出a=2,b=1;
5。分别输出执行swap方法后a和b的值,得到 a=2,b=1;
--------------------------------------------------------------------------------------------------
我的疑问是:
1。在这个程序里,实例dw在执行swap方法后a和b的值发生了变化,这说明方法参数传递的是实例本身;
2。在swap方法的最后一句加上 dw=null;swap(dw)仍然输出b=2,a=1,这说明方法swap中的dw=null 改变的是dw的副本。也就是说方法参数传递的是副本;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
矛盾ing!希望有识之士能指出其中错误!
我说的是在swap方法块内System输出后再加上一句dw-=null如下
public static void main(String[] args){
DataWrap dw=new DataWrap();
dw.a=1;
dw.b=2;
swap(dw);
System.out.println("交换之后a 的值是:"+dw.a+";b的值是"+dw.b);
dw=null
} 展开
6个回答
展开全部
我帮你解下迷惑吧。
java中传递对象参数,只是传递对象的在内存中的地址。
像你这个方法
public static void swap(DataWrap dw)
其中DataWrap dw是本方法内的变量
dw会指向传入对象的内存地址,现在假设这个Object的内存地址x0fe19,只是假设。
那么传过来的只是x0fe19,dw指向这个地方。
当你给dw重新赋值的时候,改变的是在这个地方的Object对应的属性,也就是传入的对象的属性了。
当你为dw赋null值的时候,其实只是让这个方法内的局部变量指向空而已,并不能改变传入对象的内容。
java中传递对象参数,只是传递对象的在内存中的地址。
像你这个方法
public static void swap(DataWrap dw)
其中DataWrap dw是本方法内的变量
dw会指向传入对象的内存地址,现在假设这个Object的内存地址x0fe19,只是假设。
那么传过来的只是x0fe19,dw指向这个地方。
当你给dw重新赋值的时候,改变的是在这个地方的Object对应的属性,也就是传入的对象的属性了。
当你为dw赋null值的时候,其实只是让这个方法内的局部变量指向空而已,并不能改变传入对象的内容。
展开全部
在swap方法的最后一句加上 dw=null;
输出为:
swap方法里,a 的属性值是2; b的值是1
Exception in thread "main" java.lang.NullPointerException
at Test.Test.main(Test.java:16)
发生异常了,dw=null后后面的dw.a,dw.b都是错的,出现异常。
输出为:
swap方法里,a 的属性值是2; b的值是1
Exception in thread "main" java.lang.NullPointerException
at Test.Test.main(Test.java:16)
发生异常了,dw=null后后面的dw.a,dw.b都是错的,出现异常。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你说的是
public static void swap(DataWrap dw){
int tmp=dw.a;
dw.a=dw.b;
dw.b=tmp;
System.out.println("swap方法里,a 的属性值是"+dw.a+"; b的值是"+dw.b);
dw=null;
swap(dw);
}
这意思还是只加了一句dw=null?
public static void swap(DataWrap dw){
int tmp=dw.a;
dw.a=dw.b;
dw.b=tmp;
System.out.println("swap方法里,a 的属性值是"+dw.a+"; b的值是"+dw.b);
dw=null;
swap(dw);
}
这意思还是只加了一句dw=null?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
对象型类型是引用传递,传递的是对象的地址。值被修改后原来的变量也会被修改。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第二个论点正确!
传递的如果是引用的话可以完成交换功能。
传递的如果是引用的话可以完成交换功能。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询