如何在不同数据类型上使用条件?

时间:2018-04-04 12:45:58

标签: java arraylist

我有一个整数的数组列表,我想检查该列表上的特定数据是否与声明的变量相同,但是,如果我使用if(variable == arraylist.get(i)它不起作用,我试图找到将列表转换为整数的方法,但我找不到合适的解决方案。

public static void main(String[] args) {
    List reg = new ArrayList();
    //int add;
    reg.add(2);
    reg.add(5);
    reg.add(6);

    Random rand = new Random();
    int newReg = rand.nextInt(4)+1;
    for(int i = 0; i < reg.size(); i++){
        if(newReg == reg.get(i)){
            //do stuff
        }
    }
}

3 个答案:

答案 0 :(得分:0)

问题是autoboxing隐藏了Java中的primitve类型和引用类型之间的转换。它通常很顺利,但在这种情况下,您将对象引用与整数进行比较。请尝试以下方法:

public static void main(String[] args) {
    List<Integer> reg = new ArrayList<>();
    //int add;
    reg.add(2);
    reg.add(5);
    reg.add(6);

    Random rand = new Random();
    int newReg = rand.nextInt(4)+1;
    for(int i = 0; i < reg.size(); i++){
        if(newReg == reg.get(i).intValue()){
            //do stuff
        }
    }
}

答案 1 :(得分:0)

当你执行reg.get(i)它返回对象时。你有多个选择: A.将列表定义为整数列表,即列表reg = new ArrayList(); B.将强制转换对象输入int。

首选选项是A.

答案 2 :(得分:-1)

我刚刚尝试过您的代码,而在Netbeans中,它会在您比较的行中显示错误。一般规则是永远不要你&#34; ==&#34;在比较任何引用类型时(除非您确实要检查它是否是相同的对象),请改用equals()。以下是:

    List reg = new ArrayList();
    //int add;
    reg.add(2);
    reg.add(5);
    reg.add(6);

    Random rand = new Random();
    int newReg = rand.nextInt(4) + 1;
    for (int i = 0; i < reg.size(); i++) {
        if (reg.get(i).equals(newReg)) {
            System.out.println("aa");
        }
    }