Las referencias son nombres. Los objetos son cosas. Puedes tener diferentes nombres para cosas, incluso para cosas que en realidad no existen.
Se puede declarar nombres, sin llegar a darles ninguna "real", es decir, como este:
GUI g1;
Puede asignar significado (cosas reales para referirse a) a los nombres con el operador =:
GUI g1 = some_gui;
Los nombres pueden cambiar su significado con el tiempo. El mismo nombre puede referirse a cosas diferentes en diferentes puntos de la historia.
GUI g1 = some_gui;
doSomething();
g1 = some_other_gui;
También son sinónimos: varios nombres se refieren a la misma cosa:
GUI g2 = g1;
Eso es más o menos lo hacen referencias. Son nombres destinados a referirse a cosas.
cosas se pueden crear:
new GUI();
materia puede ser creado y nombrado en el lugar para su posterior consulta (literalmente!):
GUI g1 = new GUI();
y esas cosas se puede hacer referencia a, utilizando su nombre (o cualquiera de sus nombres!):
g1.doSomething();
g2.doSomethingAgain();
Se pueden crear diferentes cosas del mismo tipo (Clase), y nam ed diferente:
GUI g1 = new GUI();
GUI g2 = new GUI();
GUI g3 = new GUI();
GUI g1_synonym = g1;
:)
Creo que no puedes usar g2 en tu código, porque aún no se ha inicializado y es nulo. – evilone
g1 es una referencia también! –
¡Creo que esta pregunta merece una buena respuesta para mantenerse! – slezica