黑马程序员技术交流社区

标题: 局部变量有点绕啊! [打印本页]

作者: 小洁呵呵    时间: 2014-7-12 16:43
标题: 局部变量有点绕啊!
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!
作者: 215041631    时间: 2014-7-12 17: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:15
215041631 发表于 2014-7-12 17:13

我知道你这代码是对的,我想知道我那样写为啥行不通。。。。。。
作者: 215041631    时间: 2014-7-12 17:15
小洁呵呵 发表于 2014-7-12 17:15
我知道你这代码是对的,我想知道我那样写为啥行不通。。。。。。

上面看懂了不,我重新编辑了下
作者: 小洁呵呵    时间: 2014-7-12 17:19
懂了   讲的不错    赞你哦
作者: 215041631    时间: 2014-7-12 17:21
小洁呵呵 发表于 2014-7-12 17:19
懂了   讲的不错    赞你哦

一起学习哈:handshake
作者: fengzheng    时间: 2014-7-12 17:29
学习了。。。顶!
作者: yanyoucheng520    时间: 2014-7-12 17:49
这只是调用,并没改变其本身的值吧
作者: zippo    时间: 2014-7-12 18:34
本帖最后由 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方法中的局部变量小红。


作者: 寻得美好    时间: 2014-7-12 18:51
这个是变量的作用域的问题。
成员变量随着对象的建立而存在,消失而消失
局部变量随着方法的调用而存在,结束而消失
作者: alive    时间: 2014-7-12 19:05
其实就是因为main方法也是方法 ,在main方法调用另外一个方法,肯定用main方法自己内部的变量。
作者: ss5619498    时间: 2014-7-12 21:45
这个好像不是局部变量的问题吧,,,,,
这个是因为调用方法时,你没有返回值的原因,这样写就是输出“小王”了
而且我记得局部变量,是指在同一个方法中,而不是在不同方法中
  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
你输出的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;
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2