Faut aussi voir que dans certains cas le compilo interprète les choses à sa manière, qui n'est pas forcément celle décrite par la spec...donc, oui dans certains cas, le debug en assembleur peut se justifier...connaitre son environnement est également un plus...
Par exemple en Java (et il ne me semble pas l'avoir vu dans la JLS) :
public static Integer sum(List<Integer> ints) {
Integer s = 0;
for (Integer n : ints) {s += n;}
return s;
}
public static void main(String[] args) {
List<Integer> smallsInts = Arrays.asList(1, 2, -120);
assert sum(smallsInts) == sum(smallsInts);
List<Integer> bigInts = Arrays.asList(1000, 1001, -4004);
assert sum(bigInts) == sum(bigInts);
}
donne (sur une VM Sun ou Apple) :
true
false
Alors que normalement "==" renvoie true si deux références sont identiques ou si deux valeurs "primitives" sont identiques...itch
L'explication peut être trouvée dans Java Generics & Collections §1.2