string是不是引用类型

 

在msdn上

值类型主要由两类组成:

结构分为以下几类:

也就是string属于引用类型,但是实际使用中

 

 

 

    1. class Program
    2.     {
    3.         static void StringCon(string str)
    4.         {
    5.             str="New String";
    6.         }
    7.         
    8.         public static void Main(string[] args)
    9.         {
    10.             Console.WriteLine("Hello World!");
    11.             
    12.             // TODO: Implement Functionality Here
    13.             string oldstr ="str";
    14.             Console.WriteLine("before:{0}",oldstr );
    15.             StringCon(oldstr );
    16.             Console.WriteLine("after:{0}",oldstr );
    17.             Console.Write("Press any key to continue . . . ");
    18.             Console.ReadKey(true);
    19.         }
    20.     }
    输出:before:str

                         after:str

也就是没有引用类型的应该有的表现。这是为什么了?

 

 

实际上。net设置string,有个事实就是string一旦建立,他的值是不可改变的,而当将一个已经存在的字符串赋予新值的时候,实际上在次过程中分配了一个新字符串(原有的字符串将被GC回收)

  1.   static void StringCon(string str)// 相当于string str =oldstr
  2. // str是oldstr的一个副本,他们只是指向相同的地址
  3.   {
  4.    str="New String";// 相当于string str =new string("New String";)
    • // str现在的地址改变了,而oldstr还是原先的地址
  5. }

           所有string在当作参数传递是有值类型的表现,但是实际还是引用类型

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值