• java 参数传递是引用传递还是值传递?


    JAVA的参数传递倒底是值传递还是引用传递,我觉得两种说法都没错,关键是看怎么理解“引用”和“引用传递”。

    (一)
    从编译原理的角度讲,所有那些无法通过形参来修改实参本身的传递机制都是“值传递”,在JAVA中,你只能通过在形参上调用方法来修改实参所引用的那个对象,却修改不了实参本身(不能使它引用到另个对象),如:
    void f(ArrayList list) {
       list = new ArrayList();    //不影响外边的实参。
    }
    所以从这个角度,JAVA中根本就没有“引用传递”(不像C#中,真的有引用传递,只需要加个ref或out关键字,就不仅可以修改实参所引用的对象,还能修改实参本身)。
    这种说法并非没有道理,因为如果说“通过一个具有索引功能的东西来修改它所索引的那个东西”就算引用传递的话,那么也可以任何语言的参数传递都可进行引用传递了。那你说Windows API中和各种HANDLE算不算“引用传递”呢?

    (二)在JAVA中,除了内建类型的变量,“一切都是引用”,所以传递一个非内建类型的参数,当然也就是传递一个引用,所以,也可以说JAVA中所有的(除非内建类型)参数传递又“都是引用传递”。

    只要明白(一)和(二)所说的根本不是一回事,就知道许多人在争些什么了。

  • 相关阅读:
    ASCII码详解
    C#中判断上传类型为Excel,03和07版的链接字符串
    文本搜索工具的制作过程之搜索
    文本搜索工具之显示
    用C#实现十六进制字符串转换为ASCII
    7个秘诀 工作效率和薪水都翻倍
    C#委托
    VB的写法,关于版本写入注册表
    k8s 集群灾难恢复 k8s
    k8s 接合阿里云负载均衡 k8s
  • 原文地址:https://www.cnblogs.com/rosepotato/p/3420641.html
Copyright © 2020-2023  润新知