日期:2014-05-20 浏览次数:20833 次
public class StringTest { /** * @param args * */ public static void main(String[] args) { String[] flag=null; reFormat(flag); System.out.println(flag);//为什么输出来的还是null? } private static void reFormat(String[] flag){ String[] flags ={"1","2","3"}; flag=flags; } }
public class StringTest { /** * @param args * */ public static void main(String[] args) { String[] flag=null; reFormat(flag); //(1)将flag的首地址传进去。 System.out.println(flag);//为什么输出来的还是null? } private static void reFormat(String[] flag){ //(2)这里的flag是形参 其值为实参(main方法中的flag)的首地址 String[] flags ={"1","2","3"}; //(3)局部变量 其值为自己的首地址 flag=flags; //(4) 将局部变量flags的首地址赋给形参flag,也就是说现在形参flag的值为局部变量flags的首地址。跟实参(main方法中的flag)一点关系也没有。改变的形参的值,而实参未变化。这里不是C++里的指针,只传过来首地址的值,而不是把首地址本身传过来。故而main方法的flag还是null } }
------解决方案--------------------
public class StringTest { public static void main(String[] args) { String[] flag=null; reFormat(flag);//Java是值传递,将实参flag=null传递形参flag后,形参flag=null, //方法reFormat将形参的flag变成了flags={"1","2","3"},但是此时实参flag还是null, //最后形参的flag被扔掉了,而实参flag一直都是null从未改变过。 System.out.println(flag); } private static void reFormat(String[] flag){ String[] flags ={"1","2","3"}; flag=flags; } }
------解决方案--------------------
Java中的好像传递的是引用吧。所以不管你方法中的形参如何改变值,你如果没有通过return返回接收的话。 应该是不能改变其值的。。
------解决方案--------------------
四楼正解