zoukankan      html  css  js  c++  java
  • c#String的不变特性,可读但不可写性

    谈到字符串,大家自然觉得简单,但是总是有一些小的问题隐约出现,下面我就系统的说一下字符串的问题,有说不到日后再予补充。

    1,首先String是一个类,string只是String类的一个别名,别名的意思:另一个代号,就是和String一样使用。

    2,string str=“abc”,和char[] cha={'a','b','c'}的不同。大家不要简单认识一个字符串就是一个字符数组。要理解本质。

    就是字符串的不变性,string只是可读,但不可写。但字符数组可读可写。

    可读:字符串中的str[0]=a  str[1]=b  str[2]=c,字符中的str[0]=a  str[1]=b  str[2]=c,

    可写:字符串里的元素是不可写的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class Program
        {
            static void Main(string[] args)
            {
                char[] cha = { 'a', 'b', 'c' };
                Console.WriteLine(cha[0]);
                cha[0] = 'b';
                Console.WriteLine(cha);
     
                string str = "abc";
                Console.WriteLine(str[0]);
                // str[0] = 'd';
                Console.ReadKey();
            }

    若str[0]='d';将会报“错误 1 无法对属性或索引器“string.this[int]”赋值 -- 它是只读的“字符数组可以。  

    这里有人提出,str=“abc”;str+=“d”,Console.WriteLine(str);出现abcd;这不是表明字符传可以更改吗?可写吗?

    下面咱们就针对这个问题自习分析一下。

    看到这个图,相比大家大家明白了字符串的不变性。再来个图证明这个不变性。

    3,这里又一次证明了字符串不可变性,另外提出一个问题,那就是字符串的“暂存池”的概念。

    string str=“abc”;string str1=“abc”两者指的是同一个对象。

    但是这仅仅是string str=“abc”;string str1=“abc,而不是char[] cha={'a','b','c'}; string str=new string(cha);

    在调试的时候打开监视窗口,输入*变量,监视变量的地址,两者是同一地址,证明指向的同一变量。下图不同地址,自然不同变量。

    总结,处理字符串 一定要有接受他的返回值,因为每处理一次,就会产生一个对象。

    常常将字符串实例,ToCharArray();然后再调用string的(char[])构造函数。“修改”字符串中的元素。

    问题:这里会让我们想到传递和引用传递的用法。以后再予更新。

    4,

    string str=null;

    str="";

    string str1=string.Empty;

    string str2="";

    string str3=“ ”;//有个空格

    运行过str=null后,str的地址没有变化,依然是0x00000000,所以说,没有分配内存空间。

    运行完后,如上图显示,证明string.Empty和“”是一样的,当然也和先赋null,再“”一样。但是拥有一个空格字符就不同了。

    复制代码
    //string a = "abc";
    //char[] ch = { 'a', 'b', 'c' };
    //string a = new string(ch);
    string a = "abc";
    string b = a; 
    b+="def";
    Console.WriteLine(a);//abc //new方法得到一样的结果
    Console.WriteLine(b);//abcdef
    Console.ReadKey();
    复制代码
    知识没有高低贵贱之分。
  • 相关阅读:
    Redhat7.x静默安装19C客户端
    利用增量备份修复DG备库中的gap>>>>>>>>>>>有新增数据文件
    利用增量备份修复DG备库中的gap>>>>>>>>>>>无新增数据文件
    ORA-01665 control file is not a standby control file
    ORA-01110 ORA-01122 ORA-01110 ORA-01200解决办法
    Zabbix5.0+Grafana可视化部署教程
    RedHat 7.5配置bonding双网卡绑定(转)
    11.2.0.1 RAC环境部分磁盘组无法自动挂载,导致数据库实例无法启动(转)
    11.2.0.1 RAC环境经典bug CRS-4124: Oracle High Availability Services startup failed.
    Git配置SSH及常用命令
  • 原文地址:https://www.cnblogs.com/maijin/p/6914815.html
Copyright © 2011-2022 走看看