日期:2014-05-20  浏览次数:20755 次

为什么输出的是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返回接收的话。 应该是不能改变其值的。。
------解决方案--------------------
四楼正解