• Java基础:值传递和引用传递


    概念

    值传递:指的是在方法调用时,传递的是参数是按值的拷贝传递。
        特点:传递的是值的拷贝,也就是传递后就互不相关了。


    引用传递:指的是在方法调用时,传递的参数是按引用进行传递,其实传递的是引用的地址,也就是变量所对应的内存空间的地址。
         特点:传递的是值的引用,也就是说传递前和传递后都指向同一个引用(也就是同一个内存空间

    这不就是看传的参数是基本类型的还是引用类型的吗?(其中比较特殊一点的是String类型和基本类型的包装类类型,它们也是按值传递的,但它是属于引用类型)

    值传递:基本类型

    传递后=复制一份

    改变不会影响原始数据

    值传递:String类,包装类

    传递后=复制一份

    改变不会影响原始数据

    string类是因为+=,=,这些操作都是复制了一份新的到内存空间

    包装类:

    传递后=复制一份

    改变不会影响原始数据

    引用传递:引用类型

    传递指针

    改变会影响原始数据

    作者:Intopass
    链接: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"。

    数组的情况:

    数组是引用类型

    所以是引用传递

    参考:

    https://zhuanlan.zhihu.com/p/61517562

    https://www.zhihu.com/question/31203609/answer/50992895

  • 相关阅读:
    springmvc spring mybatis框架整合
    多线程bug修复
    OutOfMemory
    CSS中强悍的相对单位之em(em-and-elastic-layouts)学习小记
    css中line-height行高的深入学习
    HTML5的新语义化的标签
    关于Three.js基本几何形状
    【Google Chrome】 Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource问题解决
    模拟Bootstrap响应式网格系统
    关于我对写博客那些事儿的实用心得
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14500138.html
Copyright © 2020-2023  润新知