还是老问题————字符串

qiance 2009-04-27 10:29:03
string str1=null;
string str2=String.Empty;
string str3="";


str1和底下两个不同
后两个str3是空字符串,分配空间,
用if(str2==str3)括号里结果是true

在园子里看到说
string.Empty不分配存储空间
""分配一个长度为空的存储空间


请问string.Empty不分配存储空间 这句话对还是错
求证下。。

...全文
186 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
llsen 2009-04-27
  • 打赏
  • 举报
回复
分配空间
string.empty和""区别不是很大
qq34448635 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 qiance 的帖子:]
C# codestring str1=null;
string str2=String.Empty;
string str3="";

str1 只是定义这个变量,在内存中并没有分配什么,没有地址。只是在栈上分配这个变量名

str2和str3是一样的,在内存中已分配空间,只是是零字符串,已经有地址了。

米か臹 2009-04-27
  • 打赏
  • 举报
回复
请问string.Empty分配存储空间
qiance 2009-04-27
  • 打赏
  • 举报
回复
null是不分配
但是用Empty也是不分配
猿敲月下码 2009-04-27
  • 打赏
  • 举报
回复
string.Empty 你用断点调试下看它的值,是""
qiance 2009-04-27
  • 打赏
  • 举报
回复
Empty是一个静态只读变量,存在于堆空间之中,声明一个新的String类型非静态非只读变量并赋值为String.Empty,那么实际上是讲引用指向于Empty这个静态内存区域,并没有实际创建内存空间
qiance 2009-04-27
  • 打赏
  • 举报
回复
Empty是一个静态只读变量,存在于堆空间之中,声明一个新的String类型非静态非只读变量并赋值为String.Empty,那么实际上是讲引用指向于Empty这个静态内存区域,并没有实际创建内存空间
qiance 2009-04-27
  • 打赏
  • 举报
回复
thanks
已经明白
Empty是一个静态只读变量,存在于堆空间之中,声明一个新的String类型非静态非只读变量并赋值为String.Empty,那么实际上是讲引用指向于Empty这个静态内存区域,并没有实际创建内存空间
xiaoyasheng 2009-04-27
  • 打赏
  • 举报
回复
string.Empty表示零长度字符串 ""
wartim 2009-04-27
  • 打赏
  • 举报
回复
csdn有时还真卡

不过推荐String.Empty
和本地空字符串怎么实现无关,虽然字符串肯定都是“”。。。。
而且不容易出错,""如果不小心一天中间多打了一个空格而又用来做sql查询条件而且没有trim过,导致查询不出来,一时可能还看不出来的
zhoulehua 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 Z_L_H 的回复:]
String.Empty,Empty是String的一个属性,是一个常数,””是一个字符串对象, 对字符串对象进行运算总是很慢的。
一般地,在C#中,最好是对属性进行操作。
[/Quote]

14楼说得不错。
zhoulehua 2009-04-27
  • 打赏
  • 举报
回复
ding
Z_L_H 2009-04-27
  • 打赏
  • 举报
回复
String.Empty,Empty是String的一个属性,是一个常数,””是一个字符串对象, 对字符串对象进行运算总是很慢的。
一般地,在C#中,最好是对属性进行操作。
yangqidong 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yangqidong 的回复:]
在你的代码中用10次String.Empty,这10个其实是同一个空字符串
用10次 "" 则会有10个不同存储空间的空字符串
[/Quote]
我错了,""确实和String.Empty一样的效果
十八道胡同 2009-04-27
  • 打赏
  • 举报
回复
帮顶
wartim 2009-04-27
  • 打赏
  • 举报
回复
null 不分配空间
String.Empty和""一样
给你贴一段.net framework源代码你就知道了
 private const int TrimHead = 0; 
private const int TrimTail = 1;
private const int TrimBoth = 2;

// The Empty constant holds the empty string value.
//We need to call the String constructor so that the compiler doesn't mark this as a literal.
//Marking this as a literal would mean that it doesn't show up as a field which we can access
//from native.
public static readonly String Empty = "";

//
//Native Static Methods
//

// Joins an array of strings together as one string with a separator between each original string.
//
public static String Join (String separator, String[] value) {
zhazha0304 2009-04-27
  • 打赏
  • 举报
回复
我来推荐一个java视频课程在线试听:http://www.cdlanhai.com/zxst/
wartim 2009-04-27
  • 打赏
  • 举报
回复
null 不分配空间

String.Empty和""一样
给你贴一段framework源代码你就知道了
 private const int TrimHead = 0; 
private const int TrimTail = 1;
private const int TrimBoth = 2;

// The Empty constant holds the empty string value.
//We need to call the String constructor so that the compiler doesn't mark this as a literal.
//Marking this as a literal would mean that it doesn't show up as a field which we can access
//from native.
public static readonly String Empty = "";

//
//Native Static Methods
//

// Joins an array of strings together as one string with a separator between each original string.
//
public static String Join (String separator, String[] value) {


qiance 2009-04-27
  • 打赏
  • 举报
回复

""理论上重新开辟内存空间,而String.Empty指向一处已分配好的内存空间,String.Empty是string类的一个字段
[Quote=引用 5 楼 yangqidong 的回复:]
在你的代码中用10次String.Empty,这10个其实是同一个空字符串
用10次 "" 则会有10个不同存储空间的空字符串
[/Quote]
longzhizhanshen 2009-04-27
  • 打赏
  • 举报
回复
string.Empty分配内存空间
string str2=String.Empty相当于调用了String类里的方法
具体的查下c#文档
加载更多回复(8)

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧