美文网首页
家人不用再担心面试卡壳了——Java函数调用 值传递、引用传递

家人不用再担心面试卡壳了——Java函数调用 值传递、引用传递

作者: Phoebe_Liu | 来源:发表于2018-10-24 11:59 被阅读0次

    这个部分其实考究的是:是否可以准确理解每个变量存储的是值or地址(引用)?值存在常量池or堆?
    链接:https://www.zhihu.com/question/31203609/answer/50992895

    传值的方式传引用。 或者说传值的方式传地址

    参数传递基本上就是赋值操作。第一个例子:基本类型

    void foo(int value) {
        value = 100;
    }
    foo(num); // num 没有被改变
    

    第二个例子:没有提供改变自身方法的引用类型

    void foo(String text) {
        text = "windows";
    }
    foo(str); // str 也没有被改变
    

    第三个例子:提供了改变自身方法的引用类型

    StringBuilder sb = new StringBuilder("iphone");
    void foo(StringBuilder builder) {
        builder.append("4");
    }
    foo(sb); // sb 被改变了,变成了"iphone4"。
    

    第四个例子:提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。

    StringBuilder sb = new StringBuilder("iphone");
    void foo(StringBuilder builder) {
        builder = new StringBuilder("ipad");
    }
    foo(sb); // sb 没有被改变,还是 "iphone"。
    

    用图解释一下第四个例子:


    String传递1.jpg String传递2.jpg
    • 数组也是对象。所以当我们传递一个数组引用给一个方法时,数组的元素是可以被改变的,但是无法让数组引用指向新的数组。
    • 一个方法不能修改一个基本数据类型的参数
    • 一个方法可以修改一个对象参数的状态
    • 一个方法不能实现让对象参数引用一个新对象

    相关文章

      网友评论

          本文标题:家人不用再担心面试卡壳了——Java函数调用 值传递、引用传递

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