空值(null
)和空字符串(""
)有什么区别?
我写了一些简单的代码:
String a = "";
String b = null;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // false
这两个语句都返回false
。看来,我找不到它们之间的实际区别。
空值(null
)和空字符串(""
)有什么区别?
我写了一些简单的代码:
String a = "";
String b = null;
System.out.println(a == b); // false
System.out.println(a.equals(b)); // false
这两个语句都返回false
。看来,我找不到它们之间的实际区别。
String s = "";
s.length();
String s = null;
s.length();
引用一个空字符串""
指向堆中的一个对象 - 因此您可以在其上调用方法。
但是,指向null
的引用没有对象指向堆,因此您将得到NullPointerException
。
String s=null;
字符串s未初始化为null。如果进行任何字符串操作,可能会抛出空指针异常。
String t="null";
它是一个具有字符串值“null”的字符串字面量,就像t =“xyz”一样。它不会抛出空指针异常。
String u="";
它是一个空字符串,不会抛出空指针异常。
null
表示什么都没有;它意味着您从未为变量设置值,但是空值表示您已将 ""
值设置为您的 String
。例如,请参见以下示例:
String str1;
String str2 = "";
str1
是null
,意味着你已经定义了它,但还没有为其设置任何值。但是你已经定义了str2
并将其设置为空值,因此它有一个值,即使该值是""
。
str1
可以与其他字符串进行比较,但当比较str2
时,会在RuntimeException
中抛出NullPointerException
异常。简单来说,
"" 是一个空的字符串
null 是一个空的字符串变量。
null
值。如果一个字符串是 null
,它不引用任何内存中的内容。尝试使用 s.length()>0
。这是因为如果一个字符串是空的,它仍然返回长度为 0。所以如果你对相同的东西什么都不输入,那么它仍然会继续循环,因为它不会将该字符串注册为 null
。而如果你检查长度,那么它会退出它的循环。这个概念可以从数学上更好地理解。您曾经尝试使用计算器将一个数字(而不是零)除以0,例如7/0吗?你会得到一个看起来像这样的结果:undefined
,not a number
,null
等。这意味着这个操作是不可能的,出于某些原因(让我们把这些原因留待另一天讨论)。
现在,执行以下操作:0/7。你会得到输出值0。这意味着这个操作是可能的并且可以执行,但是答案只是0,因为在除法之后没有剩余物品。有一个有效的输出和这个输出值为零。
在第一个例子中,输出不仅无效,而且操作不可能执行。这类似于Java中的null
字符串。第二个例子类似于empty
字符串。
作为一个好奇心
String s1 = null;
String s2 = "hello";
s1 = s1 + s2;
System.out.println((s); // nullhello
“我称它为我的亿万美元错误。这是在1965年发明了空引用。” - https://en.wikipedia.org/wiki/Tony_Hoare
就现实世界而言,两者可以被认为是相同的。只是编程语言的语法会导致两者之间的差异,正如其他人在这里所解释的那样。这仅仅会产生额外的开销,例如当检查/比较字符串变量是否有内容时,您必须首先检查它是否不为空,然后才能进行实际的字符串比较,即进行两次比较。这对于每个字符串比较来说都是一种浪费处理能力的方式。
Objects.equals() 在调用 .equals() 之前检查 null。
空字符串和null的区别。例如:你有一个名为x的变量。如果你在JS中写入:
var x = "";
这意味着你已经赋了一个空字符串(长度为0)的值。实际上,这就像是一些东西,但感觉上什么都没有 :) 另一方面,
var y = null;
这意味着你在声明时没有给y赋值,明确地写入了null。如果你写y.length;它会抛出一个错误,表示没有给y赋值,因此无法读取y的长度。
b.equals(a)
相比较--但不要使用==
进行字符串比较,因为在其他方面"它不起作用"。null
值(与空字符串""
不同,后者是有效的 String 实例)永远不能调用方法。将“已知非空”的值(通常是常量或文字)放在等式的左侧被称为“Yoda 条件语句”或类似的东西。 - user166390