Difference between null and empty (“”) Java String
我写了一些简单的代码:
1 2 3 4 5 |
两条语句均返回
"是实际字符串,尽管是空字符串。
但是,null表示String变量不指向任何内容。
区别在于尽管由于"是实际的字符串,所以您仍然可以像上面那样调用方法或函数
等等。
如果String等于null,例如b,如果您尝试调用,Java会抛出
如果您想知道的差异是==与equals,那就是:
==比较参考,就像我去了一样
由于我分配了两个不同的对象,而a和b指向不同的对象,因此输出false。
但是,在这种情况下,
但是请注意,Java对于字符串确实有特殊情况。
您可能会认为输出为
您还可以通过以下方式了解null和空字符串之间的区别:
字符串是一个对象,可以为null
null表示未实例化String对象
"是实例化对象字符串的实际值,例如" aaa"
这是一个可以阐明这一点的链接http://download.oracle.com/javase/tutorial/java/concepts/object.html
您的陈述告诉您的只是"与null不同-是的。"是一个空字符串; null表示未分配任何值。
尝试一下可能会更有启发性:
"仍然是一个字符串,这意味着您可以调用其方法并获取有意义的信息。null是一个空变量-字面上什么都没有。
两者之间有相当大的区别。空字符串
这里
1 2 3 |
这是我的类似答案
null表示名称未引用任何实例化的对象。"表示一个空字符串。
在这里,a引用了一些恰好是空字符串的对象。 b没有引用任何对象,因为它为null。
在Java中,分配为
"和null都不同。第一个表示作为字符串变量声明的一部分,已在字符串池中创建了字符串常量,并为此分配了一些内存。
但是,当我们用null声明它时,它刚刚被实例化了jvm,但是没有为它分配内存。因此,如果您尝试通过使用"-空白变量"检查该对象来访问该对象,则它不能防止nullpointerexception。请在下面的一个用例中查找。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class StringCheck { public static void main(String[] args) { // TODO Auto-generated method stub String s1 ="siddhartha"; String s2 =""; String s3 = null; System.out.println("length s1 ="+s1.length()); System.out.println("length s2 ="+s2.length()); //this piece of code will still throw nullpointerexception . if(s3 !=""){ System.out.println("length s3 ="+s3.length()); } } |
}
对空字符串
但是指向
字符串未初始化为null。如果尝试任何字符串操作,则可能引发空指针异常
它是一个字符串文字,其值字符串为" null",类似于t =" xyz"。它不会抛出空指针。
它是一个空字符串,不会抛出空指针。
The empty string is distinct from a
null reference in that in an
object-oriented programming language a
null reference to a string type
doesn't point to a string object and
will cause an error were one to try to
perform any operation on it. The empty
string is still a string upon which
string operations may be attempted.
摘自维基百科上有关空字符串的文章。
简单来说
-
"是一个空字符串
-
null是一个空的String变量。
字符串可以为空或具有
从数学上可以更好地理解这个概念。您是否尝试过使用7/0等计算器将数字(非零)除以0?您将得到类似于以下内容的结果:
现在,执行以下操作:0/7。您将获得输出0。这意味着该操作是可能的并且可以执行,但是您的答案仅为0,因为除法后没有任何剩余。存在有效输出,并且该输出为零。
在第一个示例中,不仅输出无效,而且无法执行该操作。这类似于Java中的
当你写
这意味着存在一个字符串类型的变量" a",该变量指向字符串池中具有值""的对象引用。由于变量
而当你写
这意味着存在类型为string的变量
现在,让我们评估以下表达式。
1 2 3 4 5 | System.out.println(a == b); // false. because a and b both points to different object reference System.out.println(a.equals(b)); // false, because the values at object reference pointed by a and b do not match. System.out.println(b.equals(a)); // NullPointerException, because b is pointing to unknown reference and no operation is allowed |