日期:2014-05-20 浏览次数:20960 次
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返回接收的话。 应该是不能改变其值的。。
------解决方案--------------------
四楼正解