questões básicas do programa java

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

Perguntas são seguidos:

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

}
Publicado 26/08/2009 em 22:53
fonte usuário
Em outras línguas...                            


2 respostas

votos
5

  1. Sim.
  2. Não.
  3. Sim.
  4. Tipo de. Na verdade não. É este uma pegadinha?
  5. Sim!
  6. Não.
  7. Não.

Ok, aqui estão algumas respostas reais.

  1. O newoperador atribui memória a menos que não é suficiente disponível. Mesmo se o construtor do objeto falhar, e a memória alocada é rapidamente lixo coletado, espaço para o novo objeto é alocado temporariamente.
  2. Isso aloca espaço para os campos de um ArrayList, que não dependem do número de elementos na ArrayList, e, além disso, ele irá criar espaço suficiente para referências a 10 objetos, que não dependem do tamanho dos objetos em si; os ponteiros serão 32 bits em um sistema de 32 bits e 64 bits (ou talvez comprimido para algo menos por um muito inteligente dia VM) em um sistema de 64 bits.
  3. Esta é uma tarefa simples. Ambas as variáveis ​​foram atribuídos o mesmo valor.
  4. Memória foi alocada inicialmente para 20 referências de objeto. No entanto, se mais de 20 objetos são adicionados à lista, ArrayListvai realocar automaticamente o armazenamento necessário.
  5. Sim. Neste caso, pode-se ver que há referências ao objeto originalmente atribuído a bList3pode "escapar" a ser fortemente referenciada. Esse objeto não referenciado é agora elegível para coleta de lixo.
  6. bList4ainda aponta para o mesmo objeto e esse objeto não pode ser lixo coletado. Essa lista faz referência a todos os elementos referenciados por bList, mas eles não são os mesmos. Em particular, a mudança de uma lista não afetará o outro, mas alterações aos conteúdos das listas será visível através de nenhuma das listas.
  7. Não, Java passa referências por valor, por isso, um método não pode causar referência de um chamador para se referir a um objeto diferente.
Respondeu 26/08/2009 em 22:58
fonte usuário

votos
1
  1. Sim.

  2. Não. Ele vai alocar memória para 10 referências a B objetos, e possivelmente mais (desde ArrayList pode crescer e ter mais espaço interno do que é actualmente necessário para o seu conteúdo).

  3. Sim.

  4. Veja 2.

  5. Sim.

  6. Não. Você criou dois separados ArrayListobjetos, neste caso, o que significa que se você adicionar outro elemento para bList4ou remover um dos seus elementos, a mudança não será visível no bListe vice-versa (o que seria se você atribuiubList4 = bList;

  7. Não, porque você substituir uma cópia da referência bList3dentro method1- que não tem efeito fora do método. Se, no entanto, que modificou o objeto da lista ou o seu conteúdo, as mudanças seriam visíveis fora.

Respondeu 26/08/2009 em 23:07
fonte usuário

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