黑马程序员技术交流社区
标题:
关于HelloWorld的问题,,求解释
[打印本页]
作者:
伍淑江
时间:
2013-4-3 19:22
标题:
关于HelloWorld的问题,,求解释
本帖最后由 张熙韬 于 2013-4-6 08:42 编辑
public class StringDemo {
public static void demo(String a){
a+="World";
}
public static void main(String[] args){
String a= "Hello";
demo(a);
System.out.println(a);
}
}
为什么运行结果是Hello呢?能解释下吗?
作者:
谢达
时间:
2013-4-3 19:41
当你调用 Demo(a)时传进去的是a的一个副本(a的复制),你在demo里面修改的是副本的值,而a本身并没有变化
作者:
杜加璇
时间:
2013-4-3 19:42
是这样的String类型的变量被创建后值是不会被改变的,执行这步时a+="World";是又重新生成新的的变量 a指向新生成的变量,你在主方法内执行System.out.println(a);这里的a指向的是“hello”,如果你在Demo方法里执行System.out.println(a);输出的就是helloworld
作者:
胡滨
时间:
2013-4-3 20:05
楼主要实现那样输出的话可以这样:
public class Demo {
public static String demo(String a){
a=a+"World";
return a;
}
public static void main(String[] args){
String a= "Hello",b;
b=demo(a);
System.out.println(b);
}
}
作者:
朱盛文
时间:
2013-4-3 20:32
public class StringDemo {
public static void demo(String a){ //这里虽然传入a,但是在内存中却是新建了一个对象
a+="World"; //这里得到的a其实是另一个对象了,加上这里没有返回值
}
public static void main(String[] args){
String a= "Hello"; //String一旦创建并赋值,就不能再更改
demo(a);
System.out.println(a); //所以这里打印的还是a的初始化值
}
}
复制代码
作者:
田磊阳
时间:
2013-4-3 22:14
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
作者:
朱德帅
时间:
2013-4-3 23:02
public static void demo(String a){
a+="World";
}
这里是静态方法,存储在方法栈里。当这个方法运行结束后就会释放。原先的实参并没有任何改变。
作者:
庄生晓梦
时间:
2013-4-4 17:13
你所打印的值是a的初始化值;你可以a = demo(a);这样就可以得到HelloWorld了
public class StringDemo {
public static String demo(String a){
return a+="World";
}
public static void main(String[] args){
String a= "Hello";
a = demo(a);
System.out.println(a);
}
}
作者:
艾萱
时间:
2013-4-4 21:47
String赋值后不能修改,而且demo()方法没有返回值,最后输出还是初始化的值hello
作者:
、__WSD吴少东
时间:
2013-4-6 00:18
一个是局部变量,一个是主函数变量,你把主函数变量赋给局部变量,只是把主函数的值赋给局部变量,可最后,主函数的值还是没有变的
解决办法,让调用的函数返回局部变量的值赋给主函数变量。
作者:
周志伟
时间:
2013-4-6 01:05
少了return语句
作者:
muma
时间:
2014-3-22 23:11
因为你的demo(String a)是返回值时void类型是不会改变a的值的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2