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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 曾玉锋 高级黑马   /  2012-7-18 09:24  /  2336 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

string str=null;与string str="";在内存上的差异,求解.
主要是堆栈、分配空间、指针这些东西。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

9 个回复

倒序浏览
null是表示空的,既没有值也没用分配空间,而""则表示空值,有分配空间,在这个分配空间上存的数值是一个空值!
希望对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
1,null没有分配空间;
2,""分配了空间;
3,string str=null;str还不是一个实例化的对象;
4,string str="";     str已经实例化。

评分

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

查看全部评分

回复 使用道具 举报
许庭洲 发表于 2012-7-18 09:44
1,null没有分配空间;
2,""分配了空间;
3,string str=null;str还不是一个实例化的对象;

谢谢!
那请问一下
String str;(只声明未赋值)和String str=null;它们有区别么?
回复 使用道具 举报
曾玉锋 发表于 2012-7-18 10:15
谢谢!
那请问一下
String str;(只声明未赋值)和String str=null;它们有区别么? ...

String str;//程序通不过
String str=null;//str赋了值,但能通过编译
回复 使用道具 举报
许庭洲 发表于 2012-7-18 10:21
String str;//程序通不过
String str=null;//str赋了值,但能通过编译

嗯,明白了,谢谢。
回复 使用道具 举报
NULL是空,没有分配空间也没有值," "的表示空值 分配了空间的
string str=NULL  str并没有被实例化
string str=“ ” 被实例化了

评分

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

查看全部评分

回复 使用道具 举报
NULL代表声明了一个空对象,根本就不是一个字符串。   
""代表声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串。

NULL代表声明了一个空对象,对空对象做任何操作都不行的,除了=和==   
""是一个字符串了,只是这个字符串里面没有内容

String s=null;只是定义了一个句柄,也就是说你有了个引用,但是这个引用未指向任何内存空间   
String s="";这个引用已经指向了一块是空字符串的内存空间,是一个实际的东东了,所以你可以对它操作

评分

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

查看全部评分

回复 使用道具 举报
杨正 中级黑马 2012-7-18 17:36:17
9#
string str=null 在内存上没有分配空间;
而string str="" 则由系统自动分配一个空间,在栈区(stack)上。并且是一个空值。(这里的空值不是没有值,而是一种值的形式)

评分

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

查看全部评分

回复 使用道具 举报
string str=null,没有值,并不分配内存空间
string str="",分配一个是空值的内存空间

评分

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

查看全部评分

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