黑马程序员技术交流社区

标题: 字符串疑问? [打印本页]

作者: 李柯    时间: 2012-4-15 17:55
标题: 字符串疑问?
对于 String str = null与String str = ""理解的不是很清楚,
希望能详细解释一下他们的区别?
作者: 白潇    时间: 2012-4-15 18:03
null表示声明了一个空对象,可以说它根本就不是一个字符串
而“”表示声明了一个对象实例,这个对象实例的值就是一个长度为0的空字符串
如果 你  String s=null; string.trim();就会抛出为空的exception 但如果是String s="";就不会抛出
作者: 王德南    时间: 2012-4-15 18:24
null只是一个空对象,不是一个字符串,除了==和=不能做任何操作。而""声明了一个对象实例,这个对象实例的值是一个长度为0的空字符串,可以对它进行任何操作。String str=null未分配堆内存空间,仅代表一个空引用,但是这个引用未指向任何内存空间。String str="" 这个引用指向了一块是空字符串的内存空间。
作者: 于潇    时间: 2012-4-15 18:28
本帖最后由 于潇 于 2012-4-15 18:35 编辑

string   str= " ",表示一个空串,被实列化了,占用了内存空间,
string   str=null,表示一个空串,没有占用了空间,

作者: 陈坚    时间: 2012-4-15 18:45
string   str= "";//声明了一个变量,变量指向""(空字符串)。已经实例化了,在内存中已经开辟了地址空间
string   str=null;//声明了一个变量,变量指向null对象。 没有实例化,在内存中没有地址,仅是一个空引用

作者: 魏明明    时间: 2012-4-15 18:51
String str = null并没有创建对象。如果是成员变量的话 默认初始化就是null

String str = "" 创建了一个字符串对象,这是一个空的字符串。

作者: 小鹿叙鹿    时间: 2012-4-15 22:26
String   str= " ":   表示一个空串,其值被存储在堆中。一般连接字符串的话这样写比较方便,但是不建议这样做。
String   str=null:   空引用,不引用任何对象。一般用于在方法中存放并返回一个值。
String   str   =   null;
你说这个分配了内存没有
理论上是肯定分配了内存的了,不然的话编译器用什么来辨别null呢。就像这个一样:
int   i;
首先,该语句声明了int变量i。编译器不会让我们使用这个变量,(成员字段除外)除非我们用一个值初始化了该变量。但这个声明会在堆栈中给它分配4个字节,以保存其值。
作者: 党传才    时间: 2012-4-15 23:08
string   str= "", string   str=null
都是声明了一个String的变量,
而前者指向""(空字符串),实例化了,在内存中已经开辟了地址空间,一般不推荐这样使用;
后者指向null对象, 没有实例化,在内存中没有地址,仅是一个空引用。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2