为什么输出的是null

疯狂的驴子 2011-11-17 12:49:38

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;
}

}
...全文
491 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂的驴子 2011-11-18
  • 打赏
  • 举报
回复
不知道,这样的答案,大家满意不?满意我就结贴了啊!!
疯狂的驴子 2011-11-18
  • 打赏
  • 举报
回复
终极结论:java中传值,都是值传递的,基本数据类型,传递的是其本身的拷贝,复合数据类型的,传递的是其引用(就是一个内存地址)拷贝,不管,方法中对传入的参数如何改变,不会改变原来的值。至于,12楼同志的这个列子,本质上改变的是引导对象的值而应用本身是没改变的,也就是:array本身没有改变,改变的只是array指向的对象的内容。
dylhua 2011-11-18
  • 打赏
  • 举报
回复
四楼正解
rocky225 2011-11-18
  • 打赏
  • 举报
回复
flag=flags 传的是对象不是传值...数组是不能这样赋值的
rocky225 2011-11-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 nobullet 的回复:]

我觉得原因是这样的:数组虽然是引用传递,但是flags的在reFormat中被指向了该方法中的flags,在reFormat结束之后,在该方法中声明初始化的变量也被在内存中清除,所以flags重新指向了一个null。
[/Quote]
恩...
LPZLSDJF 2011-11-17
  • 打赏
  • 举报
回复
System.out.println(reFormat(flag));
打印语句不对 你掉reFormat()这个方法的时候 没有返回值去接 而你
String[] flag=null;
reFormat(flag);
System.out.println(flag);//为什么输出来的还是null?
那个flag还是空的~只初始化了一次
Tirion_Fordring 2011-11-17
  • 打赏
  • 举报
回复

public static void main(String[] args) {
// TODO Auto-generated method stub
String[] flag=null;
flag = reFormat(flag);
System.out.println(flag);
}
private static String[] reFormat(String[] flag){
String[] flags ={"1","2","3"};
flag=flags;
return flag;
}


每天回帖即可获得10分可用分!
Tirion_Fordring 2011-11-17
  • 打赏
  • 举报
回复
基础。。。
q515041602 2011-11-17
  • 打赏
  • 举报
回复
Java中的好像传递的是引用吧。所以不管你方法中的形参如何改变值,你如果没有通过return返回接收的话。 应该是不能改变其值的。。
凌风雪雕 2011-11-17
  • 打赏
  • 举报
回复
自己回家看基础吧
xifengwujiutian 2011-11-17
  • 打赏
  • 举报
回复
这样就能解决:

import java.util.Arrays;

public class Demo {
public static void main(String[] args) {

String[] flag = null;

flag=reFormat1(flag);
System.out.println(Arrays.toString(flag));

}

// flag 是形参,Java是传引用的,但是不会改变形参的值
private static String[] reFormat1(String[] flag) {
String[] flags = { "1", "2", "3" };
return flag = flags;
}
}
脉动 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 agui54762 的回复:]
作用域啊

Java code

public class StringTest {

/**
* @param args
*
*/
public static void main(String[] args) {

String[] flag=null;


reFormat(flag);……
[/Quote]
reFormat()方法的所有操作,并未影响到main()方法的flag。
wbo112 2011-11-17
  • 打赏
  • 举报
回复
初学Java,发表下我的观点,如果有错误的还希望大家多多指教


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;
}

}

nobullet 2011-11-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 yuanxiao27 的回复:]

应该这样理解:java中参数的传值是引用传值,也就是,会传一个值的拷贝,到方法中去。改变的只是,这个拷贝,而值的本身没有改变。对吗?同志们??
[/Quote]
不对啊,同志。

public static void main(String[] s) {
String[] array = {"0"};
System.out.println(array[0]);
change(array);
System.out.println(array[0]);
}

private static void change(String[] test_array) {
test_array[0] = "1";
}

输出结果:0
1
你传递进去的数组对象在这个程序中都是同一个对象,只是指向不同的引用。在方法里他被指向了{ "1", "2", "3" },方法结束之后在方法中声明的{ "1", "2", "3" }就不复存在了。所以这个对象指向的就变成了一个不复存在的东西。所以是null。
疯狂的驴子 2011-11-17
  • 打赏
  • 举报
回复
TMD的这些基础知识,都快丢了,唉,就天天知道写代码,靠,真不知道什么时候是个头。
疯狂的驴子 2011-11-17
  • 打赏
  • 举报
回复
应该这样理解:java中参数的传值是引用传值,也就是,会传一个值的拷贝,到方法中去。改变的只是,这个拷贝,而值的本身没有改变。对吗?同志们??
脉动 2011-11-17
  • 打赏
  • 举报
回复
怎么显示不了,哪位大哥指点一下,如何显示图片?
脉动 2011-11-17
  • 打赏
  • 举报
回复

测试图片显示,呵呵
LucEaspe 2011-11-17
  • 打赏
  • 举报
回复
package main;

public class Main {

public static void main(String[] args) {

String[] flag = null;

reFormat1(flag);
// 打印数组要遍历,这样打印的是数组地址的哈希码
System.out.println(flag);

}

// flag 是形参,Java是传引用的,但是不会改变形参的值
private static void reFormat1(String[] flag) {
String[] flags = { "1", "2", "3" };
flag = flags;
}

}
LucEaspe 2011-11-17
  • 打赏
  • 举报
回复
package main;

public class Main {

public static void main(String[] args) {

String[] flag = null;

reFormat1(flag);
// 打印数组要遍历,这样打印的是数组地址的哈希码
System.out.println(flag);

}

// flag 是形参,Java是传引用的,但是不会改变形参的值
private static void reFormat1(String[] flag) {
String[] flags = { "1", "2", "3" };
flag = flags;
}

}
加载更多回复(2)

51,397

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧