当前位置: 代码迷 >> Java相关 >> 为什么输出的是null,该怎么处理
  详细解决方案

为什么输出的是null,该怎么处理

热度:9534   发布时间:2013-02-25 21:49:02.0
为什么输出的是null
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,发表下我的观点,如果有错误的还希望大家多多指教
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返回接收的话。 应该是不能改变其值的。。
------解决方案--------------------------------------------------------
四楼正解
  相关解决方案