zoukankan      html  css  js  c++  java
  • 对于string类的困惑

    我们都知道,string类是一个reference type。看下面这段代码:
    string s1 = "hello";
    string s2 = s1;
    Console.WriteLine(s1);
    Console.WriteLine(s2);
    s1 
    = "world";
    Console.WriteLine(s1);
    Console.WriteLine(s2);
    按理来说,s1被赋予world之后,那么s2应该也是指向这段内存空间,输出world,但实际上不是这样。
    代码输出为:
    hello
    hello
    world
    hello
    C#高级编程中是这么解释的,s1被修改后,会重新分配一块内存,来指向新的s1。这是解释了为什么会有这个结果。但是,它没有解释,CLR为什么要这么特殊处理string类。难道,因为string类用的特别多,要符合大家的使用习惯?

    看下面这段代码,class很明显也是一个reference,但是结果却和上面不同。
    // 类的定义
    public class Test{
        
    private int number;

        
    public Test(int number){
            
    this.number = number;
        }


        
    public int Number{
            
    get{return number;}}

            
    set{number = value;}
        }


        
    public override string ToString(){
            
    return Number.ToString();
        }

    }

    // 测试代码
    Test t1 = new Test(10);
    Test t2 
    = t1;
    Console.WriteLine(t1.ToString());
    Console.WriteLine(t2.ToString());
    t1.Number 
    = 20;
    Console.WriteLine(t1.ToString());
    Console.WriteLine(t2.ToString());

    上述代码输出的,是我们期望的值:
    10
    10
    20
    20
  • 相关阅读:
    crm 4 注释与上传附件权限
    动态图片轮播
    PHP 连接 MSSQL
    php mssql 中文各种乱码
    百度地图逆地址解析
    Microsoft Visual C++ 2015 Redistributable(x64)
    服务器 vps 空间
    Python之路【第二篇】:Python基础(二)
    Python之路【第一篇】:Python简介和入门
    2016年会成为Java EE微服务年吗?
  • 原文地址:https://www.cnblogs.com/juqiang/p/37549.html
Copyright © 2011-2022 走看看