美文网首页
Java中的值传递与引用传递

Java中的值传递与引用传递

作者: TongJing | 来源:发表于2020-03-20 18:24 被阅读0次

    今天在看题的时候,碰到一道题,挺好,分享一下。

    给定以下代码,程序的运行结果是()
    
    public class Example {
        String str=new String("good");
        char [] ch={'a','b','c'};
    
        public static void main(String[] args) {
            Example ex=new Example();
            ex.change(ex.str, ex.ch);
            System.out.print(ex.str+"and");
            System.out.print(ex.ch);
        }
    
        public void change(String str1,char ch1[]){
            str1="test ok";
            ch1[0]='g';
        }
    }
    A. goodandabc
    B. goodandgbc
    C. test okandabc
    D. test okandgbc
    

    先说答案。选B。
    分析一下,开始对象实例化了一个Example对象,叫ex。并有两个属性str和ch。具体分配如下 所示。

    图1
    进入到change()方法后,改变如下:
    图2
    图3
    所以结果为B。
    字符串是不可变的,所以当str1被赋值为"test ok",就是将引用指向了新的地方,并不是改变原有的"good"。而数组呢,可以改变,将ch[0]修改为了g。

    关于Java是值传递还是引用传递的问题,Java是值传递的。解释如下:

    从上面的例子也可以看出,在传递参数的时候,将str(本身是一个对象的引用),复制了一份,叫str1,他也是一个对象的引用。他们指向同一个对象。如图2。

    引用传递的话,那么,在传递参数的时候,是直接将str传递给了形参,只是换了一个名字叫做str1,本质上str和str1是同一个。如图4所示。 图4
    所以Java为值传递。

    如有理解不正确的地方,还请留言指正,谢谢。

    相关文章

      网友评论

          本文标题:Java中的值传递与引用传递

          本文链接:https://www.haomeiwen.com/subject/ffajyhtx.html