一些平等的条件不起作用

Some equal condition didn't work

为什么等于运算符在这种情况下不起作用:

Integer act0 = Integer.valueOf(ac.split("-")[0]);
if (activite_alerte.getActivite().getIdActivite() == act0)) {
    add_notif(profil, ao);
    added = true;
    break;
}

activite_alerte.getActivite().getIdActivite()act0 等于 439 但它不起作用,但其他值起作用。

您使用的是盒装整数类型 Integer。 Java 允许对 -128 到 +127 范围内的值使用 == 相等,因为这些是 "canned" 盒装值,因此参考比较将适用于该范围内的数字。但是你的号码 - 439 - 太大了。

对于盒装类型,您应该使用 .equals()

我个人认为这是 Java 最有害的方面之一。

考虑以下程序:

public class Test {
    public static void main(String args[]) {
        Integer a = new Integer(1);
        Integer b = new Integer(1);
        System.out.println(a == b);
    }
}

这个程序的输出是false。对于浮点数和整数类型,java 具有原始类型(intlongfloatdouble、...),它们不是对象,而对象对应物(IntegerLongFloatDouble、...),它们是对象。当我们写

int a = 3;
int b = 3;

3被赋值给原始类型的两个变量ab。可以使用 == 测试两个变量是否相等,在本例中将 return true.

但是如果你这样写:

Integer a = 3;
Integer b = 3;

感谢名为 自动装箱 的功能,这实际上是以下语法糖:

Integer a = new Integer(3);
Integer b = new Integer(3);

这里我们有两个变量,每个变量都引用 class Integer 的一个对象。 Integer 的两个实例是不同的,即使在语义上它们反映了相同的底层 int 值。在 java 中,应用于变量引用对象的 == 运算符测试两个变量是否 相同 ,即它们是否引用相同的对象实例。因此

Integer a = 3;
Integer b = 3;
System.out.println(a == b);

将打印 false,因为自动装箱创建的两个整数是不同的。另一方面,这个:

Integer a = 3;
Integer b = a;
System.out.println(a == b);

将打印 true,因为 b 引用在声明 a 时自动装箱创建的同一对象。

除了同一性测试之外,对于非原始变量,您还可以使用 equals() 方法测试 相等性 。所以这个:

Integer a = 3;
Integer b = 3;
System.out.println(a.equals(b));

将打印 trueequals() 方法在 Object class 中定义,因此任何 class 都会继承。 Object 中定义的检查身份,但每个子 class 应该覆盖该方法以提供预期的语义。例如,在 Integer 的情况下,重新定义会检查保存整数值的原始成员变量的身份。