LoginSignup
0
0

More than 3 years have passed since last update.

Java Integerの比較(==)が正しく動作しない

Posted at

現象

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を使いように注意しないとでしたー。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0