Domanda

Si consideri il seguente codice:

for(int i = 0;i < 200;i++)
{
  ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};
  // do something with currentList
}
  • In che modo Java trattare la classe di currentList?
  • Sarà considerarlo una classe diversa per ciascuno dei 200 oggetti?
  • Sarà una performance colpito anche dopo che è stato creato il primo oggetto?
  • E 'caching in qualche modo?

Sono solo curioso:)

È stato utile?

Soluzione

ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};

è la creazione di un nuovo istanza della classe anonima ogni volta attraverso il vostro ciclo, non è ridefinire o ricaricare la classe ogni volta. La classe è definita una volta (in fase di compilazione), e una volta caricata (durante l'esecuzione).

Non c'è significativo calo di prestazioni di utilizzare classi anonime.

Altri suggerimenti

Il compilatore sta per trasformare qualsiasi classe anonima a una classe interna di nome. Quindi il codice, sarà trasformato in qualcosa sulla falsariga di:

class OuterClass$1 extends ArrayList<Integer> {
    OuterClass$1(int i) {
      super();
      add(i);
    }
}

for (int i = 0; i < 200; i++) {
    ArrayList<Integer> currentList = new OuterClass$1(i);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top