public class test {
    public static void changestr(String str){
        str="welcome";
    }
    public static void main(String[] args){
        String str="1234";
        changestr(str);
        System.out.println(str);
    }
}
结果怎么是1234?
我是新手,我就想问问,我用了changestr函数了,我不是把str的引用指向了welcome了吗?为什么输出还是1234

解决方案 »

  1.   

    那是你的参数,它也是一个变量
    你这样去想
    String str="1234";//这是main方法里的
    然后是调用函数
    String str=str;//右边的就是上边的str,把实参传给形参
    左边就是那个参数里的str
    然后你在函数里
    str="welcome";
    并没有改变外边的str啊.你只是改变了里边 的str;
      

  2.   

    你把那个方法的参数的名称改了再去理解一下.
    假设那个方法是一个过程,这个过程呢提供一个篮子(参数),用来放苹果(String)的,当然它是空的,实际工作的时候,你需要给它苹果.给它苹果的时候它就把你所给的苹果放在那个篮子里,给了它之后,它可以把篮子里的苹果都吃了.然后再拿去装别的苹果.
    你在给苹果的时候也要用一个篮子装着吧.你给的时候只是把苹果给它,它用别的篮子去装(参数).
      

  3.   

    我知道传值的,那str不是"1234"的引用吗?难道不是传引用,而是传值?我记得"1234"是一个对象,而str是"1234"的一个引用,str的地址指向对象"1234",我的理解错了吗?
      

  4.   

    public class test {
        public static String changestr(String str){
            str="welcome";
            return str;
        }
        public static void main(String[] args){
            String str="1234";
            
            System.out.println(changestr(str));
        }
    }
    这样就是welcome了,仔细体会两者的区别吧
      

  5.   


    我就是和下面这个程序有点搞混了!
    public class test {   
        public static void main(String[] args){
            String s="java";
            s="HTML";
            System.out.println(s);
        }
    }
    我是知道"java"对象是还在,可是s的引用变了指向了"HTML"对象,所以输出的值是HTML。
    changestr(str); 不是创建"welcome"对象,并把其引用赋给str?
    如果不是,那怎么理解上面输出的是HTML呢?