zoukankan      html  css  js  c++  java
  • 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");

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

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

  • 相关阅读:
    未能从程序集 C:Program Files (x86)MSBuild14.0inMicrosoft.Data.Entity.Build.Tasks.dll 加载任务“EntityClean”
    asp.net mvc 4 项目升级到 asp.net mvc5
    SQL Server查看所有表大小,所占空间
    0x80072f8a未指定的错误
    vs2012 aps.net4.0/4.5尚未在web服务器上注册
    vsphere 出现“在主机的当前连接状况下不允许执行该操作”
    sql server 发布时提示'dbo.sysmergepublications'无效的解决办法
    sql server更改机器名后更改数据库机器名
    Ajax向后台传入File类型参数
    上传下载Azure Blob里的Excel文件。
  • 原文地址:https://www.cnblogs.com/CharmingDang/p/9663783.html
Copyright © 2011-2022 走看看