在C#编程的时候经常会使用字符串(string)类型,它也是引用类型,但是处处都不作为引用的用法来使用,实属特例,下来我一一罗列出来,供自己记忆方便:

1)字符串的直接赋值:本身字符串就是引用类型,应该使用  new 对象方法一个实例,但是微软为了方便大家,可以直接定义字符串变量 并且赋值操作,例如: string a = "我的中国心"; ,这样只是简化我们的操作;

2)一个字符串赋值给另一个字符串变量:正常的引用类型会将两个引用变量指向同一个地址,但是一个字符串变量赋值给另一个字符串变量时,缺时建立了两个不同的地址空间,例如:

string a = "12345"; string b = a;

上面的代码是两个不同的地址引用,只是把a的字符串内容赋值给b,a和b内容是一样的;

3)同一个字符串的多次赋值:按照一般的思维对一个字符串变量赋值,只是改变其内容,不会改变其地址,但是字符串比较奇葩,当给同一个字符串变量再次赋值的时候,它会重新分配内存空间,建立一个新的地址,然后把

这个地址赋值给原来的字符串变量,举例说明:

string a= "123";  a = "456"

当第二次给a赋值为"456"时,它是创建新的内存空间,然后把新建的内存地址赋值给a变量,以前的"123"的内存摒弃不用,等待垃圾回收。

4)字符串作为函数参数传递:当字符串作为函数的参数传递时,本身是引用类型,应该是将变量的地址引用传递过去,以后在函数里对该参数的修改都会改变该字符串的值,但是我告诉你,结果它只是传递了该字符串的副本给

函数体,在函数里对该字符修改,居然不影响传递参数的值,当然,字符串的传递也可以当引用类型使用,主要添加ref 即可,可截图:

    5)字符串的比较:在字符串作为引用时,比较两个引用类型是否相等,只是比较两个引用的地址是否相等(除非你重载了Equal函数),但是当我们在比较字符串的时候,发现其实他们比较的是字符串的内容,并非是引用的地址,

这是引用string类重载了equal函数,是指比较字符的内容,在这点上  == 和 equal的结果其实是一样的;

 6)字符串的内存驻留:当我们在创建具有相同的字符串内容的变量时,这些字符串变量其实指向的同一个内存地址,这点有点像C++里的内联;

如有其它特别之处,烦请高手给予指点,如有什么不同见解之处,请留言,大家相互学习,菜鸟才能一步步成长起来,呵呵!!!

C# 引用类型之特例string的更多相关文章

  1. 值类型与引用类型(特殊的string) Typeof和GetType() 静态和非静态使用 参数传递 相关知识

    学习大神博客链接: http://www.cnblogs.com/zhili/category/421637.html 一 值类型与引用类型 需要注意的string 是特殊类型的引用类型. 使用方法: ...

  2. String属于“假引用类型”,代码为证(一个String引发的血案...)

    一直以为String是引用类型,今天写了个浅拷贝的测试,发现String有基本类型的特征. class A{ public int a = 555; } class User implements C ...

  3. String是引用类型

    关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确.希望能给大家带来点帮助. 如果有错误请指出. 来看下面例子: //值类型 ; int ...

  4. .net中String是引用类型还是值类型 以及 C#深层拷贝浅层拷贝

    http://www.cnblogs.com/yank/archive/2011/10/24/2204145.html http://www.cnblogs.com/zwq194/archive/20 ...

  5. String为值类型还是引用类型

    关于String为值类型还是引用类型的讨论一直没有平息,最近一直在研究性能方面的问题,今天再次将此问题进行一次明确.希望能给大家带来点帮助. 如果有错误请指出. 来看下面例子: //值类型 int a ...

  6. 05引用类型以及特殊引用类型string

    基本 □ 哪些属于引用类型 类(object,string),接口.数组.委托 □ 引用类型分配在哪里 ● 引用类型变量位于线程栈. ● 引用类型实例分配在托管堆上. ● 当引用类型实例的大小小于85 ...

  7. String类型是特殊的引用类型

    例证: string peom1 = "Kubla Khan"; string peom2 = "Kubla Khan"; string peom3 = Str ...

  8. string 是值类型,还是引用类型(.net)[转]

    转自http://hi.baidu.com/newfzks/item/b805f0f4edb0810dd89e7290 string 是值类型,还是引用类型(.net) 一. string 类型的用法 ...

  9. String和StringBuffer

    已知在Java中,boolean.byte.short.int.long.char.float.double这八种是基本数据类型,其余的都是引用类型,比如String.数组.接口.对象等. 当我们声明 ...

随机推荐

  1. NYOJ 289 苹果(01背包)

    苹果 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 ctest有n个苹果,要将它放入容量为v的背包.给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值. ...

  2. TP3.2二级导航与高亮显示

    闲来无事,记记笔记 二级导航的实现,就是一个二级联动,嗯 先来看看数据库,我喜欢用一个表,表多了就不好玩了 二级代号取一级导航的代号就行了,做个简单的栗子: 代码部分: 看控制器,大头在这: < ...

  3. pwnable.kr memcpy之write up

    // compiled with : gcc -o memcpy memcpy.c -m32 -lm #include <stdio.h> #include <string.h> ...

  4. POSTMAN-REST Client

    下载方式:翻.墙安装     #使用的时候不用翻.墙 下载地址:https://chrome.google.com/webstore/search/postman%20rest%20client Po ...

  5. python join 和 split的常用使用方法

    函数:string.join()Python中有join()和os.path.join()两个函数,具体作用如下:    join():    连接字符串数组.将字符串.元组.列表中的元素以指定的字符 ...

  6. Dinic算法详解及实现

    预备知识: 残留网络:设有容量网络G(V,E)及其上的网络流f,G关于f的残留网络即为G(V',E'),其中G'的顶点集V'和G的顶点集V相同,即V'=V,对于G中任何一条弧<u,v>,如 ...

  7. Orleans简单配置

    Orleans简单配置 这是Orleans系列文章中的一篇.首篇文章在此 话说曾几何时,我第一次看到xml文件,心中闪过一念想:"这<>是什么鬼?"-用ini或者jso ...

  8. 学习设计模式之MVC、MVP、MVVM

    引言:认真学习了下广义MVC模式下前端怎么写,狭义的MVC其实是有一个变化过程:MVC MVP MVVM,网上看了很多的关于这方面的介绍,以前总是将视图数据逻辑写一个模块,最近尝试分开并用组件式的开发 ...

  9. js与php的区别

     1 . PHP拼字符串用的是点.         js用+号.2.  php文件要放在wamp文件里面的www里面.3.  php与js的嵌入方式相同,只是嵌入的标记不一样.4.  php输出语法用 ...

  10. windows越用越卡怎么办?(转)

    方法一 1.按快捷键"win+R" 打开 运行窗口 2.这时候输入"msconfig"后 ,点击"确定"或者按"ENTER&quo ...