zoukankan      html  css  js  c++  java
  • java基础系列------一段具有迷惑性的代码

    今天继续坚持阅读了一篇英文版技术帖子,一如既往地艰难,感觉每天新学那么几个单词远远不足以填补我对英语的需求,看来距离能从容阅读许多框架官网文档的目标依旧遥遥无期。

    先把代码贴出来:

    public static void change(String x) {
            x = "cd";
        }
    
        public static void main(String[] args) {
            String x = new String("ab");
            change(x);
            System.out.println(x);
        }

    最终输出结果为ab,实际上并不难理解,只可惜我初看时也陷入了一种思维定式,基本数据类型传递内容,引用数据类型传递引用,也就是内存地址。

    也就是说,如果传入方法的是一个基本数据类型,那么实际上传入的是这个基本数据类型的一个副本,不论程序怎么蹂躏它都和原本的数据没有关系。

    而引用数据类型传参的时候就有些不同了,因为传递进来的是对象的引用,操作这个引用,就相当于改变了存储在堆中原本的对象,然而我忽视了一点,即便是引用数据类型传参传递进来的也是副本。

    直接操作形参变量的话与原本的变量也是没有关系的,实际上并没有改变原本变量中存储的引用。

    所以,代码出现这个现象也就不难理解了。

    感觉犯了一个不该犯的错误... ...居然会被这种问题迷惑... ...

  • 相关阅读:
    静态方法、类方法、属性方法
    B-tree/B+tree
    支付宝
    七牛云上传视频3
    测试理论
    测试理论
    Xshell上传文件
    iptables增加、删除、修改、查询、保存防火墙策略教程
    docker私有仓库常用命令
    centos7修改主机名
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13711581.html
Copyright © 2011-2022 走看看