博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#String的不变特性,可读但不可写性
阅读量:5122 次
发布时间:2019-06-13

本文共 1655 字,大约阅读时间需要 5 分钟。

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

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();

 

知识没有高低贵贱之分。

转载于:https://www.cnblogs.com/maijin/p/6914815.html

你可能感兴趣的文章
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
AS3优化性能笔记二
查看>>
Java高阶回调,回调函数的另一种玩法
查看>>
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>
js阻止事件冒泡的两种方法
查看>>
Java异常抛出
查看>>
CGRect知多少
查看>>
Android 开发环境安装配置手册
查看>>
Qt工程文件说明
查看>>
[SQL Server 系] T-SQL数据库的创建与修改
查看>>
WIN7下搭建CORDOVA环境
查看>>
74HC164应用
查看>>
变量声明和定义的关系
查看>>
300 多个免费网站和应用资源
查看>>
Oracle数据库备份还原工具之Expdp/IMPdp
查看>>
【来龙去脉系列】什么是区块链?
查看>>