空字符串和空字符串之间的区别[重复]

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的区别和判断字符串是不是为空的方法

hive的空字符串与null

Java空字符串与null的区别和判断字符串是不是为空的方法

Oracle 不区分空字符串和空字符串?

用于测试非空字符串和非空字符串的兼容 SQL

为啥空字符串和 None 的评估不同? [复制]