string.empty 跪求empty string 是怎么回事,该怎么改
大家好,今天给各位分享string.empty的一些知识,其中也会对跪求empty string 是怎么回事,该怎么改进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
请问String.Empty与""的区别是什么
一、意思不同
实际上Empty是string类中的一个静态的只读字段,他的定义是这样的:public static readonly String Empty="";也就是说string.Empty的内部实现是等于””的。
二、好处不同
""创建一个对象string.Empty不创建对象参考文献,这使得string.Empty更有效率。在.NET 2.0及更高版本中,所有出现在""引用相同的字符串文字,这意味着""等于.Empty,但还是不如.Length== 0.Length== 0是最快的选择,但是.Empty使代码稍微干净一些。
三、用法不同
string.Empty不分配存储空间,""分配一个长度为空的存储空间,所以一般用string.Empty
为了以后跨平台,还是用string.empty,在 C#中,大多数情况下""和 string.Empty可以互换使用。
如果判断一个字符串是否是空串,使用if(s==String.Empty)和if(s==””)的效率是一样的,但是最高效的写法是if(s.Length==0)
string.IsNullOrEmpty的内部实现方式:
publicstaticboolIsNullOrEmpty(stringvalue)<br>{<br> if(value!= null){return(value.Length== 0);}returntrue;}而string str=null则是表示str未指向任何对象。
String.Empty,string=””和null的区别
题主您好!
String字符串中""、null和Empty的区别如下:
"":空字符串,长度为0,内存中分配有相应地址,是一个实实在在存在的字符串,只不过这个字符串中没任何内容
null:比如String param= null;此时只是声明了一个param字符串,但并没有为其在内容中开辟单独地址。同时null本身不是对象,也不是Objcet的实例。你可以理解成他是不存在的。
empty:非""并且非null
谢谢。
跪求empty string 是怎么回事,该怎么改
将String类型数据转化为double类型的时候,你的String类型的变量值为空
解决方法:只需要在转化类型前加一个条件,使得String类型不为空就可以了,s.Length== 0优于 s== string.Empty优于 s==""
扩展资料:
1.string类函数1)=, s.assign()//赋以新值
2. swap()//交换两个字符串的内容
3.+=, s.append(), s.push_back()//在尾部添加字符
4. s.insert()//插入字符
5. s.erase()//删除字符
6. s.clear()//删除全部字符
7. s.replace()//替换字符
8.+//串联字符串
9.==,!=,<,<=,>,>=,compare()//比较字符串
10.size(),length()//返回字符数量
11. max_size()//返回字符的可能最大个数
12.s.empty()//判断字符串是否为空
13. s.capacity()//返回重新分配之前的字符容量
14. reserve()//保留一定量内存以容纳一定数量的字符
string、Empty和null三者的区别
这是一个及其常见的问题网上已经有关于这个问题的很多讨论但是我觉得都是不求甚解有一些还是在误导别人下面我来说下我对这三者的理解如有错误的地方请大家及时指正
一与string Empty我认为是一样的网上有一篇被转载了几十遍的文章是这样说的string Empty不分配存储空间分配一个长度为空的存储空间我认为这句话是错误并且含糊不清的
实际上Empty是string类中的一个静态的只读字段他的定义是这样的
public static readonly String Empty=;
也就是说string Empty的内部实现是等于的
我要反驳string Empty不分配存储空间分配一个长度为空的存储空间这个观点首先string Empty与都会分配存储空间具体的说是都会在内存的栈和堆上分配存储空间
有一点先说明一下引用类型是将对象是实际数据保存在堆上将对象在堆上的地址保存在栈上因此string Empty与都会在栈上保存一个地址这个地址占字节指向内存堆中的某个长度为的空间这个空间保存的是string Empty的实际值这个我可以用VS跟踪下内存给大家演示
上图中的 x e即是变量str在栈中存储的地址
对于请看下图
这个图的效果跟上图是一样的也就是说也是在栈上保存了一个地址
CLR会对字符串进行优化所以和string Empty也都会被优化
声明如下两个变量
string str=;
string str=;
str与str的引用会是相同的也就是str与str在栈上保存的地址上相同的请看下图
上图是str的地址上图是str的地址
可见str于str的地址是相同的也就是说str会在堆上占用一个长度为的空间而str不会在堆上开辟新的空间 str于str在堆上共享同一空间
同理对于
string str=string Empty;
string str= string Empty;
str与str的地址也是相同的也是在内存堆上共享同一空间如下图
上图是str的地址上图是str的地址
如果非要说与string Empty有什么不同的话我觉得是写法不一样 string Empty看起来好看~!~是在优化方面稍有差别 string Empty于c#对在语法级别的优化这点可以通过string Empty的内部实现看出来
public static readonly String Empty=;
也就是说是通过CLR进行优化的 CLR会维护一个字符串池以防在堆中创建重复的字符串而string Empty是一种c#语法级别的优化是在C#编译器将代码编译为IL(即MSIL)时进行了优化即所有对string类的静态字段Empty的访问都会被指向同一引用以节省内存空间
所以对的优化更依赖CLR
给大家看一下二者编译后的IL代码:
string str=;编译后如下
ldstr//从字符串池中取出一个(实际上取的是地址)
stfld string ClassLibrary Class::str//将赋给str(实际上赋的是地址)
string str=string Empty;编译后如下
ldsfld string [mscorlib]System String::Empty//取得string类的静态字段Empty(实际上取的是地址)
stfld string ClassLibrary Class::str//将Empty赋给str(实际上赋的是地址)
总结说了这么一大推我自己都觉得罗嗦而且初学者朋友可能会看不懂本人语文学的不好表达能力一般还请大家谅解下面我会挑要害来说
与string Empty在用法与性能上基本没区别 string Empty是在语法级别对的优化
二 string Empty与null的区别
因为string Empty与基本是一样的所以string Empty与null的区别也就代表了与null的区别
那就是string Empty会在堆上占用一个长度为的空间而null不会具体内容如下
string str=;
string str=null;
如刚才所说str会在栈上保存一个地址这个地址占字节指向内存堆中的某个长度为的空间这个空间保存的是str的实际值
str同样会在栈上保存一个地址这个地址也占字节但是这个地址是没有明确指向的它哪也不指其内容为 x如下图
lishixinzhi/Article/program/net/201311/13583string.empty的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于跪求empty string 是怎么回事,该怎么改、string.empty的信息别忘了在本站进行查找哦。