CompareTo() メソッドでStringとNullを比較するとどうなりますか?
Q&A
Closed
解決したいこと
CompareTo() メソッドでStringとNullを比較するとどうなりますか?
このコードはListIteratorの学習で使われたコードです。
addInOrder()というメソッドがありこのコードでアルファ別置順に旅行先を並び替えながら入力する事ができます。
アルファベット順に並び替えるためにcompareTo()メソッドを使っています。Stringもユニコードで番号を持っていて比較できると言うことまでは理解しました。
ただ、一つ、疑問に思う事があります。
一番初めに旅行先を入力するとき、このコードですと"Sydney"と入力する時Listは空っぽなのでNullと"Sydney"を比べることになると思うのですが、これはどのように処理をされているのでしょうか?
発生している問題・エラー
エラーは特に発生していません。
または、問題・エラーが起きている画像をここにドラッグアンドドロップ
該当するソースコード
import java.util.Iterator;
import java.util.LinkedList;
import java.util.ListIterator;
public class Demo {
public static void main(String[] args) {
LinkedList<String> placesToVisit = new LinkedList<String>();
addInOrder(placesToVisit, "Sydney");
addInOrder(placesToVisit, "Melbourne");
addInOrder(placesToVisit, "Brisbane");
addInOrder(placesToVisit, "Perth");
addInOrder(placesToVisit, "Adelaide");
addInOrder(placesToVisit, "Darwin");
printList(placesToVisit);
placesToVisit.add(1, "Alice Springs");
printList(placesToVisit);
placesToVisit.remove(4);
printList(placesToVisit);
}
private static void printList(LinkedList<String> Liist) {
Iterator<String> i = Liist.iterator();
while (i.hasNext()) {
System.out.println("Now visiting " + i.next());
}
System.out.println("=========================");
}
private static boolean addInOrder(LinkedList<String> linkedList, String newCity) {
ListIterator<String> stringListIterator = linkedList.listIterator();
while (stringListIterator.hasNext()) {
int comparison = stringListIterator.next().compareTo(newCity);//39行目
if (comparison == 0) {
// equal, do not add
System.out.println(newCity + " is already included as a destination");
return false;
} else if (comparison > 0) { //44行目
//初めは null-newCity , これはどうなるの?
// new City should appear before this one
// Brisbane -> Adelaide
stringListIterator.previous();
stringListIterator.add(newCity);
return true;
} else if (comparison < 0) {
// move on next city
}
}
stringListIterator.add(newCity);
return true;
}
}
自分でやってみたこと
以下のコードを書いてテストをしてみました。
public class Main {
public static void main(String[] args) throws Exception {
String a=null;
int comparison = a.compareTo("Sydney");
System.out.println(comparison);
}
}
エラーが出ました。
Exception in thread "main" java.lang.NullPointerException
at example.Main.main(Main.java:6)