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

  • 相关阅读:
    安装MySQL-python时报错
    人的成功平台很重要
    开源运维工具
    遗忘Windows Server 2008R2密码的处理方法
    操作系统下载和操作系统更新失败解决
    说说对SQL 语句优化有哪些方法?
    Git彻底删除历史提交记录的方法
    MSSQL备份脚本
    .NET Core Data Access
    各种数据库默认端口总结
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14500138.html
Copyright © 2011-2022 走看看