A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

C#中,string str = null 与 string str = ""的具体区别

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

11 个回复

倒序浏览
string s=null    在内存的堆里面开辟了一个空间存放了变量s,但它并为指向任何对象
string s=“”      在内存的堆里面开辟了一个空间存放了变量s,并且在栈中也开辟了一个空间存放常量字符串""由
              变量s指向他。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
null是没有空间引用的;
" " 是空间为0的字符串;
string str="",表示一个空串,被实列化了,占用了内存空间
string str=null,表示一个空引用,没有占用了空间

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
null是不在内存中分配空间
“”是在内存中分配一个长度为空字符串的空间

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
null代表没有,不占内存空间,
""字符串是空间为0,  string str="",这个已经被实例化了,另一个没有被实例化,只是代表空,
调试一下,看看,

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
string是引用类型
string str = null 没有创建内存空间,str中存放的是空引用指针;
string str = "" 创建了内存空间,str中存放的是指向堆中的指针。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
string str = null不会为str分配内存空间,而string str = “” 则分配长度为空字符串的内存空间。
str=null 是什么都没有,没有在内存中开辟空间,而str="" 他表面看上去什么都没有 ,其实它已经在内存中开辟了一块空间。
如果用string str = null 的话,在后面取str的值的时候,是取不到值的,而 string str ="",在后面取值时,取到一个空字符串。
在某些特定功能的时候,是必须考虑到这两个先后顺序的,比如判断用户输入信息是否为空的时候,就需要先判断==null,再判断 =="" ,反过来的话有时就会报错的。

评分

参与人数 1黑马币 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
柏云杉 发表于 2012-4-12 13:42
string s=null    在内存的堆里面开辟了一个空间存放了变量s,但它并为指向任何对象
string s=“”      在 ...

恩,有道理!我不太明白,Convert.ToString(str) 与 str.ToString()有什么区别,str.ToString貌似一旦转换为空的话就会出异常,Convert.ToString(str)没有这个问题,这个是怎么回事呀?求大虾帮忙

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
简单的说
null就是啥东西都没有,压根没放东西
""却是放了一个东西,不过那东西你看不到.

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
陈志伟 发表于 2012-4-13 18:55
string str = null不会为str分配内存空间,而string str = “” 则分配长度为空字符串的内存空间。
str=null ...

我也不知道,来学习下。:D
string str =null不会为str分配内存空间,而string str=“”则分配长度为空字符串的内存空间。
null是什么东西都没有,""是长度为0的空串,虽是空的,但是在内存中却开辟了一块空间。
string str=null的话,在后面str的值的时候,取不到值,而string str="",取值时,能取到一个空字符串。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
王雪磊 发表于 2012-4-14 08:29
恩,有道理!我不太明白,Convert.ToString(str) 与 str.ToString()有什么区别,str.ToString貌似一旦转换 ...

str.ToString(),如果str=null则会报错是因为ToString方法是str自己的一个行为。自己将自己转换为字符串。就好比你自己给自己戴帽子。如果你不存在就不可能有这个行为,所以会报错。
Conver.ToString(str),不报错是因为他是通过Conver类的ToString方法把str转换为字符串。也就是别人帮你戴帽子。null转换为字符串还是null所以不会报错。字符串在赋初值时可以赋null也可以说明这一点。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
null没有分配内存,“”已经分配了内存空间

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马