空字符串和空字符串之间的区别[重复]
Posted
技术标签:
【中文标题】空字符串和空字符串之间的区别[重复]【英文标题】:Difference between null and empty string [duplicate] 【发布时间】:2013-05-13 06:56:53 【问题描述】:空字符串 (String s = null
) 和空字符串 (String s = ""
) 有什么区别?
这就是我所拥有的:
String s1 = ""; //print statement does not print any thing for s1 but s1.length()=0
String s2 = null;//print statement prints "null" for s2 but s2.length() gives exception
什么意思?
【问题讨论】:
之前有人问过这个问题(并且得到了很好的回答):***.com/questions/4802015/… @Eric 是的,这是类似的问题,但我的目的是知道为什么 s1.length() 返回零而 s2.length() 给出异常..但无论如何谢谢我得到了一些关于这个在你链接的页面上.. 【参考方案1】:当 Object 变量最初在 Java 这样的语言中使用时,它们完全没有任何价值 - 不是零,但实际上没有价值 - 即 null
例如:String s;
如果您要使用s
,它实际上将具有null
的值,因为它绝对没有任何内容。
然而,一个空字符串是一个值——它是一个没有字符的字符串。
String s; //Inits to null
String a =""; //A blank string
Null
本质上是“无”——它是 Java 分配给任何未初始化的 Object 变量的默认“值”(松散地使用术语)。
Null
并不是一个真正的值——因此,它没有属性。因此,调用任何旨在返回值的对象(例如 .length()
)都会返回错误,因为“无”不能具有属性。
为了更深入,通过创建s1 = "";
,您正在初始化一个对象,该对象可以具有属性,并占用内存中的相关空间。通过使用s2;
,您将该变量名称指定为一个字符串,但实际上并没有在此时分配任何值。
【讨论】:
这个解释真的破了。值类型不能为空。 @carlosdc 你能详细说明一下吗?值类型不能为空是什么意思? 尝试 int i = null;在java中。 哦,你的意思是不能给null赋值? 完全正确。不是 int、char、double、float、short 或 boolean。你试图过于简化解释,这是错误的。【参考方案2】:String s1 = "";
表示将空的String
分配给s1
。
在这种情况下,s1.length()
与"".length()
相同,这将按预期产生0
。
String s2 = null;
表示将 (null
) 或“根本没有值”分配给 s2
。所以这个s2.length()
与null.length()
相同,这将产生NullPointerException
,因为您不能在Java 中调用null
变量(指针等)上的方法。
还有一点,陈述
String s1;
其实效果一样:
String s1 = null;
而
String s1 = "";
如前所述,是另一回事。
【讨论】:
【参考方案3】:不能对分配了NULL
值的对象调用任何方法。它将给出nullPointerException
。因此,s2.length()
给出了一个例外。
【讨论】:
@Alexis Wilke : 当 String s = null+"a";它给出了输出 nulla 但 null.concat("a") 它给出了空指针异常。我的第一种情况是什么原因 null+"";正在工作 或多或少,当您执行<object> + <string>
时,编译器会尝试将<object>
转换为字符串。有点像<object>.toString() + <string>
,尽管对于null
,这是一种特殊情况,因为您不能从null
调用函数。【参考方案4】:
Null
没有任何意义。它只是一个字面意思。 Null
是引用变量的值。但是空字符串是空白的。它给出了length=0
。空字符串为空值,表示该字符串没有任何内容。
【讨论】:
以上是关于空字符串和空字符串之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章
Java空字符串与null的区别和判断字符串是不是为空的方法