Java 为什么';“这是什么?”;至于;循环是否从数组列表中删除值?

Java 为什么';“这是什么?”;至于;循环是否从数组列表中删除值?,java,Java,我希望下面的方法删除输入值并在成功时返回值,但是“for”循环实际上从未删除任何值 Integer remove(Integer value) { if (_set_array.size() == 0) { return null; } else if (value == null) { return null; } else

我希望下面的方法删除输入值并在成功时返回值,但是“for”循环实际上从未删除任何值

Integer remove(Integer value)
    {
        if (_set_array.size() == 0)
        {
            return null;
        }
        else if (value == null)
        {
            return null;
        }
        else
        {
            for (int i = _set_array.size() - 1; i >= 0; i--)
            {
                if (value == _set_array.get(i))
                {
                    _set_array.remove(i);
                    return value;
                }
            }
            return null;
        }
    }

您正在比较引用。使用
intValue
方法将引用转换为基元值:

value.intValue() == _set_array.get(i).intValue()
解释如下:


或者,正如注释中所建议的,您可以使用方法
equals
来比较这两个引用

对我来说很好。你能查一下这个密码吗

import java.util.ArrayList;
import java.util.Arrays;

class Main {
    public static void main(String[] args) {
        ArrayList _set_array = new ArrayList(Arrays.asList(10000, 20000, 30000, 40000, 50000));
        System.out.println(remove(30000, _set_array));
        System.out.println(_set_array);
    }

    static Integer remove(Integer value, ArrayList _set_array) {
        if (_set_array.size() == 0) {
            return null;
        } else if (value == null) {
            return null;
        } else {
            for (int i = _set_array.size() - 1; i >= 0; i--) {
                if (value == (int) _set_array.get(i)) { // cast Integer to int primitive type
                    _set_array.remove(i);
                    return value;
                }
            }
            return null;
        }
    }
}

使用此选项进行比较:

value.intValue() == _set_array.get(i).intValue()

这会比较由单个整数表示的int原语。

相关代码不会抛出错误吗?在for循环中迭代集合时,不应该修改集合,对吗?循环从上到下进行,因此在移除元素时不会导致任何索引不对齐。我肯定是在比较引用。在将它们转换为原语之后,一切都完美地运行着。我肯定要复习一下掩蔽术。非常感谢。因为整数是低值且在常量池中。较大的值wont==我将1,2,3,4,5更改为10002000300040005000,并删除返回值null。建议值。等于(_set_array.get(i))@slipperyseal同意。因为这里他比较的是对象类型而不是原语类型,所以它不起作用。因此,他可以将值从整数转换为int基元类型。我认为这会更好,因为他比较的是int值而不是对象。您的想法是什么?您还可以将方法param更改为int,并且这些选项中的每一个都会导致自动装箱将int从对象中取消装箱。就个人而言,我认为value.equals(_set_array.get(i))的工作原理不那么模糊,因为它在整数类型上使用常规的equals方法,为什么不使用
equals
try:value.equals(_set_array.get(i))