Základní java programové otázky

hlasů
-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 }

Otázky jsou sledovány:

    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;
}

}
Položena 26/08/2009 v 22:53
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
5

  1. Ano.
  2. Ne.
  3. Ano.
  4. Jaksi. Spíš ne. Je to chyták?
  5. Ano!
  6. Ne.
  7. Ne.

Dobře, tady jsou některé skutečné odpovědi.

  1. newOperátor přiděluje paměť, pokud není k dispozici dostatek. Dokonce i v případě, že konstruktor objektu selže a přidělené paměti je rychle uvolněna, prostor pro nový objekt je přiděleno dočasně.
  2. To přiděluje místo pro oblasti po dosažení ArrayList, které nejsou závislé na počtu prvků v ArrayList, a navíc se vytvoří dostatečný prostor pro odkazy na 10 objektů, které nejsou závislé na velikosti samotných předmětů; tyto ukazatele bude 32 bitů na 32-bitovém systému, a 64 bitů (nebo možná stlačený něco méně skutečně inteligentní VM jednoho dne) na 64-bitovém systému.
  3. Jedná se o jednoduchý úkol. Obě proměnné byly přiřazeny stejné hodnoty.
  4. Paměť byla přidělena nejprve na 20 objektových referencí. Nicméně, je-li více než 20 objekty jsou přidány do seznamu, ArrayListbude automaticky realokovat potřebný úložný prostor.
  5. Ano. V tomto případě je vidět, že žádné odkazy na objekt původně přidělené bList3může „utéct“, které mají být silně odkazuje. Že neodkazované objekt je nyní způsobilá pro sběr odpadků.
  6. bList4stále odkazuje na stejný objekt, a že objekt nemůže být uvolněna. Uvedený seznam odkazuje všechny prvky, na které odkazuje bList, ale nejsou stejné. Zejména změny jednoho seznamu neovlivní druhý, ale změny v obsahu těchto seznamů bude viditelný buď pomocí seznamu.
  7. Ne, Java prochází odkazy podle hodnoty, takže metoda nemůže způsobit reference volajícího odkázat na jiný objekt.
Odpovězeno 26/08/2009 v 22:58
zdroj uživatelem

hlasů
1
  1. Ano.

  2. Ne. To bude přidělit paměť pro 10 odkazy na B objekty, a možná i více (protože ArrayList mohou růst a mají více prostoru uvnitř než je v současné době nutné pro její obsah).

  3. Ano.

  4. Viz 2.

  5. Ano.

  6. Ne jste vytvořili dva samostatné ArrayListobjekty, v tomto případě to znamená, že pokud přidat další prvek bList4, nebo odstranit jeden z jejích prvků, změna nebude vidět v bLista vice versa (což by, pokud jste přidělilibList4 = bList;

  7. Ne, protože vás přepsat kopii reference bList3uvnitř method1- který nemá žádný vliv mimo metody. Pokud však změníte objekt seznamu nebo jeho obsah, změny by byly viditelné zvenku.

Odpovězeno 26/08/2009 v 23:07
zdroj uživatelem

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