2013-05-18 250 views
27

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

是什么意思?

+5

这已被问及(以及很好的回答)之前:http://stackoverflow.com/questions/4802015/difference-between-null-and-java-string – Eric

+0

@Eric是的这是类似的问题,但我的意图是要知道为什么为s1.length()返回零和s2.length()给出例外..但无论如何,谢谢我有更多的细节信息关于你在这个页面链接你.. –

回答

46

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

String s2 = null;意味着(null)或“根本没有值”被分配给s2。因此,这个s2.length()null.length()相同,因为您不能在Java中调用null变量(指针,排序)上的方法,所以它将产生NullPointerException

此外,点,声明

String s1; 

其实具有相同的效果:

String s1 = null; 

String s1 = ""; 

,正如所说,不同的事情。

1

当对象变量是在Java等语言的最初使用,他们绝对没有价值可言 - 不是零,但硬是没有价值 - 这是null

例如:String s;

如果你是要使用s,它实际上将具有值null,因为它绝对不包含任何内容。

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

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

Null基本上是“无” - 这是默认的“价值”(用松散的术语)是Java的分配给没有初始化的任何对象变量。

Null不是一个真正的价值 - 因此,没有属性。因此,调用任何旨在返回值的内容(如.length())都将不可避免地返回错误,因为“Nothing”不能具有属性。

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

+2

这个解释是真的打破。值类型不能为空。 – carlosdc

+0

@carlosdc你能详细说明一下吗?你的意思是什么值类型不能为空? – Singular1ty

+0

try int i = null;在Java中。 – carlosdc

1

在分配NULL值的对象上不能调用任何方法。它会给出一个nullPointerException。因此,s2.length()会发出异常。

7

Null意味着什么。它只是一个文字。 Null是参考变量的值。但是空字符串是空白的。它给出了length=0。空字符串是空白值,表示字符串没有任何东西。

相关问题