Questions relatives au programme java de base

voix
-1
public class A { //some fields (may not only primitive types) and methods here}

   public class B {// some fields (may not only primitive types) and methods here, may also have a class A reference }

Les questions sont suivies:

    public class Test{ 

public static void main(String[] args){ 

A a = new A();//1. it will allocate memory for one object of A and a is the reference points to that space? 

ArrayList<B> bList = new ArrayList<B>(10);//2. it will allocate memory for 10 objects of B?

ArrayList<B> bList2 = bList;//3. bList2 reference to the same location as bList?

ArrayList<B> bList3 = new ArrayList<B>(20);//4. bList3 points to a memory location which can hold 20 objects of B?

bList3 = bList;//5. bList3 now points to the same location as bList, and the space allocated in question 4 will be cleaned by  garbage collector later?

ArrayList<B> bList4 = new ArrayList<B>(10);
bList4.addAll(bList);//6. it is the same as bList4 = bList;? and the memory created in above line will be cleaned by garbage collector later?

method1(bList3);//7.after this function call bList3 will point to memory space created for bLista inside the method1? and we can modify the content of that space via bList3

} 

public void method1(ArrayList<B> list){
//do something here
ArrayList<B> bLista = new ArrayList<B>();
list = bLista;
}

}
Créé 26/08/2009 à 22:53
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
5

  1. Oui.
  2. Non.
  3. Oui.
  4. Sorte de. Pas vraiment. Est-ce une question piège?
  5. Oui!
  6. Non.
  7. Non.

D'accord, voici quelques vraies réponses.

  1. L' newopérateur alloue de la mémoire à moins qu'il n'y a pas assez. Même si le constructeur de l'objet échoue, et la mémoire allouée est rapidement déchets collectés, la place pour le nouvel objet est affecté temporairement.
  2. Cela alloue de l' espace pour les champs d'un ArrayList, qui ne dépendent pas du nombre d'éléments dans le ArrayList, et en plus, il va créer suffisamment d' espace pour les références à 10 objets, qui ne dépendent pas de la taille des objets eux - mêmes; les pointeurs seront 32 bits sur un sur un système 64 bits système 32 bits et 64 bits (ou peut - être compressé à quelque chose de moins d'un jour vraiment intelligent VM).
  3. Ceci est une simple affectation. Les deux variables ont été attribuées la même valeur.
  4. La mémoire a été alloué initialement pour 20 références d'objet. Toutefois, si plus de 20 objets sont ajoutés à la liste, ArrayListréaffectera automatiquement le stockage nécessaire.
  5. Oui. Dans ce cas, on peut voir que aucune référence à l'objet à l' origine affecté à bList3être fortement référencés peut « échapper ». Cet objet non référencé est maintenant admissible à la collecte des ordures.
  6. bList4souligne encore le même objet, et cet objet ne peut pas être garbage collection. Cette liste fait référence à tous les éléments référencés par bList, mais ils ne sont pas les mêmes. En particulier, les modifications à une liste n'affecteront pas l'autre, mais les modifications aux contenus des listes seront visibles à travers une ou l' autre liste.
  7. Non, Java passe par des références valeur, donc une méthode ne peut pas faire de référence de l'appelant de se référer à un autre objet.
Créé 26/08/2009 à 22:58
source utilisateur

voix
1
  1. Oui.

  2. Non . Il allouer de la mémoire pour les 10 références à B objets, et peut - être plus (depuis ArrayList peut se développer et avoir plus d' espace à l' intérieur que ce qui est actuellement nécessaire pour son contenu).

  3. Oui.

  4. Voir 2.

  5. Oui.

  6. Non . Vous avez créé deux différents ArrayListobjets dans ce cas, ce qui signifie que si vous ajoutez un autre élément à bList4ou supprimer l' un de ses éléments, le changement ne sera pas visible dans bListet vice - versa (qu'il serait affecté si vousbList4 = bList;

  7. Non, parce que vous écrasez une copie de la référence à l' bList3intérieur method1- qui n'a pas d' effet en dehors de la méthode. Toutefois, si vous avez modifié l'objet de liste ou de son contenu, les changements seraient visibles à l' extérieur.

Créé 26/08/2009 à 23:07
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more