- Java code
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; }}
------解决方案--------------------------------------------------------
System.out.println(reFormat(flag));
打印语句不对 你掉reFormat()这个方法的时候 没有返回值去接 而你
String[] flag=null;
reFormat(flag);
System.out.println(flag);//为什么输出来的还是null?
那个flag还是空的~只初始化了一次
------解决方案--------------------------------------------------------
我觉得原因是这样的:数组虽然是引用传递,但是flags的在reFormat中被指向了该方法中的flags,在reFormat结束之后,在该方法中声明初始化的变量也被在内存中清除,所以flags重新指向了一个null。
------解决方案--------------------------------------------------------
作用域啊
- Java code
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 }}
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
初学Java,发表下我的观点,如果有错误的还希望大家多多指教
- Java code
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返回接收的话。 应该是不能改变其值的。。
------解决方案--------------------------------------------------------
四楼正解