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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谷文仁 中级黑马   /  2013-3-20 18:32  /  2464 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 谷文仁 于 2013-3-21 15:35 编辑

public class MapDemo3 {
    public static void main(String[] args) {
        int i = 66;
        String s = "zhangsan";
        changeInt(i);
        changeString(s);
        System.out.println(i);
        System.out.println(s);
    }

    public static void changeInt(int i) {
        i = 16;
    }

    public static void changeString(String s) {
        s = "lisi";
    }
}
为什么输出的是66  zhangsan 啊 ?
如果我要改变值该如何做啊?

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 加油~

查看全部评分

9 个回复

倒序浏览
public class MapDemo3 {
    public static void main(String[] args) {
        int i = 66;
        String s = "zhangsan";
        changeInt(i);
        changeString(s);
        System.out.println(i);//这里的i和s都是本函数中的i和s一直没有变过
        System.out.println(s);//跟下面;两个方法没有关系。
    }

    public static void changeInt(int i) {
        i = 16;//这里i并不是上面主函数中的i,
    }         //这里的i是局部变量,对这个i赋值并不会改变上面主函数的值

    public static void changeString(String s) {
        s = "lisi";//道理同上
    }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
楼上说的对,i,s是局部变量,只能在方法内有效。
如果想要修改变量的值,可以将i,s声明为静态成员变量,因为main
方法是静态方法,静态方法内不能运行非静态的变量或方法。
可以这样写:
public class Demo1 {
        static int i = 66;
    static String s = "zhangsan";
    public static void main(String[] args) {
      
        changeInt(8);
        changeString("lis");
        System.out.println(i);
        System.out.println(s);
    }

    public static void changeInt(int i) {
            Demo1.i = i;
    }

    public static void changeString(String s) {
        Demo1.s = s;
    }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
   public static void main(String[] args) {
         int i = 66;
         String s = "zhangsan";
         System.out.println(changeInt(i));
         System.out.println(changeString(s));
     }
     public static int changeInt(int i) {
         return i = 16;
     }
     public static String changeString(String s) {
         return s = "lisi";
     }
这样可以达到改变它们值的效果,
你那样做,只是改变了他们的副本,并且方法结束后,它们的副本会被销毁,原来的值并没有发生

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
若还有问题,请继续追问;没有的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
陈丽莉 发表于 2013-3-20 23:26
若还有问题,请继续追问;没有的话,请将帖子分类改成【已解决】~

不好意思,我不知道从那里设置..找了好久找不到
回复 使用道具 举报
重新编辑一下,改成已解决,就好了
回复 使用道具 举报
谷文仁 发表于 2013-3-20 23:41
不好意思,我不知道从那里设置..找了好久找不到

就是点进你的帖子,然后找到“编辑”,之后在左上角标题附近,【未解决】的位置,有一个下拉菜单,选择【已解决】就可以了~
回复 使用道具 举报
陈丽莉 发表于 2013-3-21 15:11
就是点进你的帖子,然后找到“编辑”,之后在左上角标题附近,【未解决】的位置,有一个下拉菜单,选择【 ...

谢谢你,太好了解决了
回复 使用道具 举报
  i = 16; s = "lisi"只在该方法代码块中有效,方法一结束,便会释放内存,所以不可能取到16,lisi.......不知道分析的有无道理-------------一个新手
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马