null和空字符串之间的区别

时间:2013-05-18 03:19:53

标签: java string null nullpointerexception

空字符串(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

这是什么意思?

4 个答案:

答案 0 :(得分:60)

String s1 = "";表示空String已分配给s1。 在这种情况下,s1.length()"".length()相同,将按预期产生0

String s2 = null;表示(null)或“根本没有价值”被分配给s2。因此,s2.length()null.length()相同,因为您无法在Java中调用NullPointerException变量(指针,类型)上的方法,因此会生成null

另外,一点,声明

String s1;

实际上具有与以下相同的效果:

String s1 = null;

尽管

String s1 = "";

如上所述,是另一回事。

答案 1 :(得分:10)

Null没有任何意义。它只是一个文字。 Null是引用变量的值。但是空字符串是空白的。它给出length=0。空字符串是一个空白值,表示字符串没有任何东西。

答案 2 :(得分:5)

不能对分配了NULL值的对象调用任何方法。它将给出nullPointerException。因此,s2.length()给出了一个例外。

答案 3 :(得分:4)

当Object变量最初在像Java这样的语言中使用时,它们完全没有任何价值 - 不是零,而是字面上没有价值 - 即null

例如:String s;

如果您使用s,它实际上会有null的值,因为它绝对没有任何内容。

但是,空字符串是一个值 - 它是一个没有字符的字符串。

String s; //Inits to null
String a =""; //A blank string

Null基本上是“没有” - 它是Java分配给任何未初始化的Object变量的默认“值”(使用松散术语)。

Null实际上不是一个值 - 因此,没有属性。因此,调用任何意味着返回值的内容(例如.length())将不可避免地返回错误,因为“没有”不能具有属性。

为了更深入,通过创建s1 = "";,您正在初始化一个对象,该对象可以具有属性,并占用内存中的相关空间。通过使用s2;,您将变量名称指定为String,但实际上并未指定任何值。