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
  • 相关阅读:
    蓝牙模块连接后出现ANR,日志记录
    移动基站问题
    从地址栏获取字符串
    jquery升级换代
    手机屏幕的触点
    屏幕翻转后要干什么
    条件判断后吸住底部的总结
    mouseenter 和 mouseleave
    自动垂直居中的js
    数学方法代替浮动解决自动换行排列
  • 原文地址:https://www.cnblogs.com/juqiang/p/37549.html
Copyright © 2011-2022 走看看