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");

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

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

  • 相关阅读:
    ArcEngine开发——地图浏览
    C#中字符串与数值的相互转换
    ArcGIS数据编辑——反转线段方向
    数据库移植——从MySQL Server到MS SQL Server
    重新学习数据库范式
    使用动态链接库组件进行ArcGIS开发
    ArcGIS数据编辑——按比例拉伸要素的几何形状
    ArcGIS数据编辑——要素概括(简化)/平滑
    使用Paint事件重画GroupBox来修改边框颜色
    ArcEngine开发——从TocControl上获取鼠标点击位置的信息
  • 原文地址:https://www.cnblogs.com/CharmingDang/p/9663783.html
Copyright © 2011-2022 走看看