空字符串(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
这是什么意思?
答案 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,但实际上并未指定任何值。