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

  • 相关阅读:
    AOP & 拦截器
    过滤器 & 监听器 & 拦截器
    @PropertySouce注解 读取 properties文件
    SpringBoot整合freemarker 引用基础
    lombok工具插件安装(idea、eclipse)
    Spring Spring boot 获取IOC中的bean,ApplicationContext
    logback 生成 catalina.base_IS_UNDEFINED 问题处理 &如何在eclipse/idea中添加VM参数
    springboot读取系统级环境变量,和读写系统属性以及unittest来获取环境变量的方法
    C#变量命名规则
    C#中的注释
  • 原文地址:https://www.cnblogs.com/take-it-easy/p/14500138.html
Copyright © 2011-2022 走看看