現象
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 「2 10000000 10000000」が入ってくる
int n = sc.nextInt();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < n; i++) list.add(sc.nextInt());
for (int i = 0; i < n-1; i++) {
if (list.get(i) == list.get(i+1)) {
System.out.println("等しい");
return;
}
}
System.out.println("等しくない");
}
}
list.get(i)
には10000000、list.get(i+1)
にもおなじ10000000のはずなのに結果が「等しくない」が出力されてしまいました。なぜ??
プリミティブ型は==
、オブジェクト型はequals
Integerはオブジェクト型のため、==
で比較する場合、同一のインスタンスかどうかを確認することになるため、「等しくない」になってしまうようです。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // 「2 10000000 10000000」が入ってくる
int n = sc.nextInt();
List<Integer> list = new ArrayList<>();
for (int i = 0; i < n; i++) list.add(sc.nextInt());
for (int i = 0; i < n-1; i++) {
if (list.get(i).equals(list.get(i+1))) {
System.out.println("等しい");
return;
}
}
System.out.println("等しくない");
}
}
// 結果
// 等しい
結論、数を比較する際は、プリミティブ型は==
、オブジェクト型はequals
を使いように注意しないとでしたー。