Java文字列比較方法equalsの空のポインタが異常に解決されました。
Java言語で文字列の比較には、==とequals()の2つの方法があります。
「=」は、2つのStringタイプ変数の参照に対して比較され、2つのStringタイプの変数が同一のStringオブジェクト(すなわち同じメモリスタック)を指す場合、trueに戻る。equals()メソッドは、Stringオブジェクトのパッケージの文字列内容を比較し、同じtrueに戻る。
equals方法で他の値と比較すると、空のポインタが外れてしまう可能性があります。小さいプログラムを書いて例を挙げます。
equals方法のソースコードを見れば分かります。
したがって、equalsを使用する方法では、もし数値が空のオブジェクトの例であっても、equals方法を呼び出した場合には、必ず「定数」.equals(変数)または後に入力されるequals(前の)に従ってください。このようにすれば、できるだけ空のポインターを避けることができます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
「=」は、2つのStringタイプ変数の参照に対して比較され、2つの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 ");
}
}
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();
} finally {
System.out.println("equal2 ");
}
}
public static void main(String[] args) {
equal1(null,"abc");
equal2(null,"abc");
}
}
プログラムを実行すると、最初の方法はjava.lang.Null PointerExceptionの異常を投げましたが、第二の方法はありません。これはなぜですか?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;
}
ここでは、if(anObject instance of String)で、着信されたオブジェクトがStringタイプかどうかを判断し、falseに直接戻ります。したがって、equalsを使用する方法では、もし数値が空のオブジェクトの例であっても、equals方法を呼び出した場合には、必ず「定数」.equals(変数)または後に入力されるequals(前の)に従ってください。このようにすれば、できるだけ空のポインターを避けることができます。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。