zoukankan      html  css  js  c++  java
  • 引用类型里面的静态字段注意细节

    今天在技术交流群聊天的时候,一个多年开发经验的妹子群友发出了一个问题。因为这段时间,都在看基础知识,所以就很好奇,也就跟大家一起讨论起来。

    代码大概如下:

    如上代码,很简单,输出是10 。估计妹子是晕头了,总是纠结为什么不是5。

    然后热心的群主(不是我),给妹子解释一会。然后告诉妹子,也有输出5的例子。啪啪啪,敲出如下:

    然后群里又开始炸开锅,说为啥引用类型改变值了,输出为啥没变,如是,本屌,就把代码也敲了一遍,一看输出却是10.代码如下:

    要是不细心看,还真以为有鬼呢,原来本屌多打了一个static.

    好啦,现在更加疑惑啦,一向不求甚解的本屌,今天却突然想搞个明白,如是就祭出法宝,调试。

    调试之后,发现没加static的那个例子,为啥输出5,是因为

    public void change2(a a1)
    {
    a1 = new a() { testa = 10 };
    // a1.testa = 10;
    }

    这个方法,重新实例化了a1,也就是给a1重新绑定了一个引用地址。因为a1是在这个方法里面实例化的,因为作用域,在如下控制台输出的时候并没有返回这个新引用,输出的时候,还是之前的老地址,如是解惑了为啥输出5,而不是10 。这里要注意的是 引用类型的重新实例化,改变了新引用地址,但是要注意作用域,这里新手容易出错。

    a a1=new a();
    new Program().change2(a1);
    Console.WriteLine(a1.testa);

    好了,解决了困惑一,下面来讨论下困惑2 ,为啥字段多了个static ,输出的内容就不一样了呢。

    好吧,还是调试,但是调试并没有看出什么门道,脑海中想起了,前几天书中所看到的类中的静态字段的知识。如是,就啪啪啪,打出下面的代码:

    发现,在同一作用域呢,多次实例化类,类中的静态字段的值,不管是哪个实例改变静态字段的值,所有的实例的静态字段的值,都会发生改变。这就是最需要注意的地方。

    加上技术群群号:256718021。这是个C#技术交流群,群主人是个大神,人非常好,大家可以进去,讨论交流,加上瞎扯淡。哈哈。

  • 相关阅读:
    2019沈阳网路赛 D. Fish eating fruit (点分治)
    2019南京网路赛 A.The beautiful values of the palace (主席树)
    洛谷 P2634 [国家集训队]聪聪可可(点分治)
    AcWing252 树 (点分治模板题)
    点分治模板 (洛谷 P3806)
    2020牛客寒假算法基础集训营2 J-求函数(线段树维护矩阵乘法)
    七夕祭(贪心+中位数)
    数据结构-集合
    数据结构-广义表
    数据结构-稀疏矩阵
  • 原文地址:https://www.cnblogs.com/MrYuanly/p/5007476.html
Copyright © 2011-2022 走看看