A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 伍淑江 中级黑马   /  2013-4-3 19:22  /  2474 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张熙韬 于 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呢?能解释下吗?

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

11 个回复

倒序浏览
当你调用 Demo(a)时传进去的是a的一个副本(a的复制),你在demo里面修改的是副本的值,而a本身并没有变化
回复 使用道具 举报
是这样的String类型的变量被创建后值是不会被改变的,执行这步时a+="World";是又重新生成新的的变量 a指向新生成的变量,你在主方法内执行System.out.println(a);这里的a指向的是“hello”,如果你在Demo方法里执行System.out.println(a);输出的就是helloworld
回复 使用道具 举报
楼主要实现那样输出的话可以这样:

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);
        }
}
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
回复 使用道具 举报
public static  void demo(String a){
                a+="World";
        }
这里是静态方法,存储在方法栈里。当这个方法运行结束后就会释放。原先的实参并没有任何改变。
回复 使用道具 举报
你所打印的值是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);
         }
}
回复 使用道具 举报
String赋值后不能修改,而且demo()方法没有返回值,最后输出还是初始化的值hello
回复 使用道具 举报
一个是局部变量,一个是主函数变量,你把主函数变量赋给局部变量,只是把主函数的值赋给局部变量,可最后,主函数的值还是没有变的
解决办法,让调用的函数返回局部变量的值赋给主函数变量。
回复 使用道具 举报
少了return语句
回复 使用道具 举报
muma 中级黑马 2014-3-22 23:11:01
12#
因为你的demo(String a)是返回值时void类型是不会改变a的值的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马