Java字符串⽐较⽅法equals的空指针异常的解决
在Java语⾔中字符串⽐较有两种⽅式:== 和equals()。
等一秒钟“==”⽐较的是针对两个String类型变量的引⽤,当两个String类型的变量指向同⼀个String对象(即同⼀个内存堆),则返回true。⽽equals()⽅法是对String对象封装的字符串内容进⾏⽐较,相同返回true。
在⽤equals⽅法与其他值做⽐较的时候,有可能会导致抛出空指针异常。写⼀个⼩程序来举例说明:
报关英文public class StringEqual {
public static void equal1(String i, String j) {
try {
if(i.equals(j)) {
System.out.println("equal1相等");
}
} catch (Exception ex) {
System.out.println("equal1 异常:");
ex.printStackTrace();
} finally {
System.out.println("equal1结束");17again
}
}
public static void equal2(String i, String j) {
try {
if(j.equals(i)) {
System.out.println("equal2相等");
}
} catch (Exception ex) {
System.out.println("equal2异常:");
ex.printStackTrace();
bachelor
} finally {
System.out.println("equal2结束");
}
}
public static void main(String[] args) {
equal1(null,"abc");
equal2(null,"abc");
上海服装设计学校
}商务英语口语考试
}
运⾏程序可看到第⼀个⽅法抛出了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) {
caac
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {建设工程安全生产管理条例
if (v1[i] != v2[i])
return fal;
i++;
}
return true;
}
}
return fal;
}
这⾥⽤ if (anObject instanceof String) 来判断传⼊的对象是否是String类型,如果不是直接返回fal。
因此在使⽤equals⽅法上,如果⼀个数值可能为空的对象实例,调⽤equals⽅法时,⼀定要遵循 “常量”.equals(变量) 或者后
输⼊的.equals(之前的)。这样就可以尽量避免空指针错误。
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。账户性质
rookie