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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小洁呵呵 中级黑马   /  2014-7-12 16:43  /  1416 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Test{
        public static void main(String[] args){
                String name="小红";
                show(name);
                System.out.println(name);
        }
        public static void show(String name){
                name="小王";
        }
}
为啥输出的不是小王呢?求详细解释,thank you very much!

13 个回复

倒序浏览
本帖最后由 215041631 于 2014-7-12 17:15 编辑
  1. public class Test
  2. {
  3.     public static void main(String[] args)
  4.                 {
  5.                          String name="小红";
  6.              name = show(name);
  7.              System.out.println(name);
  8.         }
  9.         public static String show(String name)//setName 名字会比较好一点
  10.                 {
  11.                 name="小王";
  12.                                 return name;
  13.         }
  14. }
复制代码


你局部变量NAME 的作用域只在主函数里面,你在主函数外面即使修改了也没有用,你要在作用域里面去修改他,所以要重新赋值一下

点评

我懂了,谢谢  发表于 2014-7-12 17:17
回复 使用道具 举报 1 0

我知道你这代码是对的,我想知道我那样写为啥行不通。。。。。。
回复 使用道具 举报
小洁呵呵 发表于 2014-7-12 17:15
我知道你这代码是对的,我想知道我那样写为啥行不通。。。。。。

上面看懂了不,我重新编辑了下
回复 使用道具 举报
懂了   讲的不错    赞你哦
回复 使用道具 举报
小洁呵呵 发表于 2014-7-12 17:19
懂了   讲的不错    赞你哦

一起学习哈:handshake
回复 使用道具 举报
学习了。。。顶!
回复 使用道具 举报
这只是调用,并没改变其本身的值吧
回复 使用道具 举报
zippo 中级黑马 2014-7-12 18:34:49
9#
本帖最后由 zippo 于 2014-7-12 18:35 编辑

  1. public class Test{
  2.          public static void main(String[] args){
  3.                    String name="小红";
  4.                    show(name);
  5.                    System.out.println(name);
  6.          }
  7.          public static void show(String name){
  8.                      name="小王";
  9.          }
复制代码
这涉及到变量的内存空间的问题。执行过程是这样的。1、在方法区加载Test类文件
2、main方法是程序的主入口,jvm会在栈内存开创一个main方法的空间。
      在这过程中声明了局部变量name,然后调用了show这个方法,而传递的name是以值的副本的形式传递的。
3、这时jvm又在栈内存中又开辟了一个名叫show方法的内存空间,又定义了一个局部变量name为小王。
4、但这个name并不等于main方法的name,因为局部变量的作用域只是在所属方法的内存空间中。
5、所以 System.out.println(name);输出的是main方法中的局部变量小红。

回复 使用道具 举报
这个是变量的作用域的问题。
成员变量随着对象的建立而存在,消失而消失
局部变量随着方法的调用而存在,结束而消失
回复 使用道具 举报
alive 中级黑马 2014-7-12 19:05:32
11#
其实就是因为main方法也是方法 ,在main方法调用另外一个方法,肯定用main方法自己内部的变量。
回复 使用道具 举报
这个好像不是局部变量的问题吧,,,,,
这个是因为调用方法时,你没有返回值的原因,这样写就是输出“小王”了
而且我记得局部变量,是指在同一个方法中,而不是在不同方法中
  1.                  public static void main(String[] args){
  2.                            String name="小红";
  3.                            name=show(name);
  4.                            
  5.                            System.out.print(name);
  6.                  }
  7.                  public static String show(String name){
  8.                              name="小王";
  9.                              return name;
  10.                  }
复制代码
回复 使用道具 举报
Adjin 中级黑马 2014-7-13 11:43:38
13#
你输出的name就直接是String name="小红";这个
show(name)了,没有去处理返回来的值,
class Test
{
        public static void main(String[] args){
                String name="小红";
                name=show(name);
                System.out.println(name);
        }
        public static String show(String name)
                {
                                name="小王";
                                return name;
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马