黑马程序员技术交流社区

标题: 关于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
  1. public class StringDemo {
  2.         public static  void demo(String a){    //这里虽然传入a,但是在内存中却是新建了一个对象
  3.                 a+="World";                //这里得到的a其实是另一个对象了,加上这里没有返回值
  4.         }
  5.         public static void main(String[] args){
  6.                 String a= "Hello";       //String一旦创建并赋值,就不能再更改
  7.                 demo(a);
  8.                 System.out.println(a);     //所以这里打印的还是a的初始化值
  9.         }
  10. }
复制代码

作者: 田磊阳    时间: 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