当我用这两种方式编程时,我得到了不同的模拟结果:
if (S == null) {
return new LinkedList<>();
}
和
int len = S.length();
if(len == 0) return new LinkedList<>();
第一个代码给了我[&#34;&#34;],它通过了测试。虽然第二个给了我[],但失败了。 我还注意到还有另一种方式:S.isEmpty()
有人请解释一下吗?非常感谢!
答案 0 :(得分:3)
String == null
检查对象是否为null
(没有,甚至不是空字符串)和String#length() == 0
(实际上,您应该使用String#isEmpty()
)检查字符串对象有0个字符。此外,如果对象为null
,则无法访问任何方法,它将抛出NullPointerException
(或简称NPE)。
答案 1 :(得分:2)
如果传入第二个字符串的字符串为null,则应该发生异常,因为.length()
在空字符串上调用时会抛出异常。
答案 2 :(得分:2)
(string == null)和(string.length()== 0)之间的区别?
非常不同。
当您检查true
时,它会检查字符串引用是否指向任何现有对象。如果它没有引用任何对象,它将返回string.length() == 0
。
.length()
只检查现有的String对象的 内容 ,看看它的长度是否为0.如果调用时{?}当前变量中没有对象1}},你得到一个NullPointerException
。
答案 3 :(得分:2)
S是一个引用变量(你应该用小写字母写)。
S(或更确切地说是s)引用提供方法长度()的对象。
如果s实际上是对象的引用,则只能访问s引用的对象。如果s为null(s == null),则s不引用对象,因此,不能调用方法length()。如果你尝试,你将得到一个NullPointerException。
当s引用一个对象时,可以在该对象上调用length方法。在这种情况下,它是一个字符串对象。字符串对象可能不存在任何字符(空字符串或&#34;&#34;)。
String s; // just a reference, initial value is null
s = ""; // s now references an empty string and is no longer null
new String(""); // create a new object with an empty string
在Java中,你从未真正使用过对象。您只能使用对象的引用,但在大多数情况下,它看起来好像您直接使用对象。
请记住,引用变量和对象实际上是针对不同的东西。
答案 4 :(得分:1)
如果String
实例为null
,myInstance.length() == 0
将抛出NullPointerException
,因为您调用未实例化实例的实例成员并使应用程序崩溃。
因此,如果您不确定您的String实例是否已实例化,请始终执行null
- 检查,或者更好地使用Java 8或更高版本,使用Optional
来避免null's
1}}。
答案 5 :(得分:1)
S == null
意味着如果您尝试打印某些内容,则不会发生任何事情(或者可能是nullPointerEcxeption
),因为null表示此变量中没有任何内容。
String.lenght(S) == 0
表示您的字符串等于&#39;&#39;
例如:
String S1 = '';
String S2 = null;
try{
System.out.println(S1.length() == 0) {
System.out.println('S1 is not null');
}catch(nullPointerExeption e){
System.out.println('S1 is null');
}
try{
System.out.println(S2.length())//it will throw you a java.nullpointerexcption
System.out.println('S2 is not null');
}catch(nullPointerExeption e){
System.out.println('S2 is null');
}
系统将写入
0
S1 is not null
S2 is null
答案 6 :(得分:-2)
创建新对象时,对象的值最初为null 像
String s=new String();
在这种情况下
s=null //but not s="";