• Java中参数传递的问题


     

    Java code <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    public class Test2

    {

        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这个方法后,没有改变?本人小菜一个,大家多看看.谢谢

    回答:

    1.跟静态没有一点关系,下面结果一样!

    public class Test2

    {

        public void changeStr(String str){

            str = "welcome";

        }

        public static void main(String args[]){

            String str = "1234";

            new Test2().changeStr(str);

            System.out.println(str);

        }

    }

    2.String的不可改变和StringBuffer也没有一点关系,下面结果还是一样!

     

    public class Test2 {

           public  void changeStr(StringBuffer str){

            str = new StringBuffer("welcome");

        }

        public static void main(String args[]){

        StringBuffer str = new StringBuffer("1234");

            new Test2().changeStr(str);

            System.out.println(str);

        }

     

    }

     

    3.只是JAVA中传参的小问题,用下面这个例子分析:

    package org.leno;

     

    public class Student {

    private String username;

     

    public Student(String username) {

           super();

           this.username = username;

    }

     

    public String getUsername() {

           return username;

    }

     

    public void setUsername(String username) {

           this.username = username;

    }

    }

     

    public class Test2 {

           public  void changeStr(Student str2){

            str2 = new Student("welcome");

        }

        public static void main(String args[]){

        Student str = new Student("1234");

            new Test2().changeStr(str);

            System.out.println(str.getUsername());

        }

    }

    虽然传参的时候strstr2指向同一个学生对象,但在方法里面我们将str2变量指向了其它对象,而这时候的str

    还是指向原来的学生对象,所以打印出来的依然是原来学生的名字。浅显点说就是和下面的情况差不多:

    Student str = new Student("1234");

    Student str2 = str;

    str2 = new Student("welcome");

    打个比方就是原本两根线都栓着同一个宠物,而后来一根线栓向另一个宠物去了,(虽然这根线很快就消失了,没有任何意义,局部变量嘛!),

    但原先的线栓的宠物是没有任何改变的!

  • 相关阅读:
    理解MySQL——索引与优化
    一个简单的效果可以拖动的div
    jsp中验证码的实现
    java经典算法四十题
    java.util.Date和java.sql.Date的区别及应用
    懒人笔记memcache配置(php)
    很奇怪的SQL问题,top和inner join一起使用时出现排序问题
    aspnet_regiis一些技巧
    webservice服务输出xml格式自定义格式内容
    FCK配置中文版(转自网络,未知来源)
  • 原文地址:https://www.cnblogs.com/CharmingDang/p/9663783.html
Copyright © 2020-2023  润新知