最近发现了一个非常脑残的小问题,关于java中判断字符串是否为空。
String test = null;
if(test.equals(null)){
System.out.println("yang");
}
会报错 Exception in thread "main" java.lang.NullPointerException
然后看了一下equals的源代码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String) anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
在Java中,有2种主要的数据类型:基本数据类型和引用类型。定义成基本数据类型的变量用来保存值,而定义成引用的变量用来保存引用。java中null不是一个合法的对象引用,所以系统并没有给它分配内存。它仅仅是一个用来表明该引用变量没有引用任何对象的值。
JVM规范中是这么说的
Java虚拟机规范并没有强制规定null应该是什么值。
所以在判断string类型是否为空是 应该用==来判断。