Est-ce que le compilateur Java optimise et ne crée pas de nouveaux objets/références si ce n'est pas nécessaire?Optimisation du compilateur Java et création de nouveaux objets/références si cela n'est pas nécessaire
par exemple.
public class Foo {
public void foo(Object[] data) {
for(int i=0; i<data.length; i++) {
Object d = data[i]; // <-- here
bar(d);
}
}
private void bar(Object o) {
//...
}
}
est la même chose que:
public class Foo {
public void foo(Object[] data) {
for(int i=0; i<data.length; i++) {
bar(data[i]); // <-- and here
}
}
private void bar(Object o) {
//...
}
}
dans exécution?
Aucune création d'objet impliquée dans les deux extraits ... la seule chose qui est enregistrée (et oui, probablement optimisée telle quelle) est la variable locale. Pour voir si le compilateur produit réellement le même code, regardez le Bytecode. – Fildor