¿Cómo contienen las listas referencias de objetos / valores en Java?

Cuando agrego un objeto a una Lista y cambio la propiedad del objeto, ese cambio se propagará al objeto en la lista, sin embargo, cuando configuro el objeto como nulo, no obtengo un puntero nulo del objeto en la lista. ¿Por qué es esto?

public class Hworld {

    public static void main(String[]args) {

        List<Obj> list = new ArrayList<>();

        Hworld.Obj o = new Obj();

        list.add(o);

        for(Obj ob:list) {
            System.out.println(ob.b); // prints "base"
        }

        o.b="new";
        o=null;

        for(Obj ob:list) {
            System.out.println(ob.b); // prints "new"
        }

    }

    public static class Obj{

        String b = "base";

    }   
}
Respuesta 1

Esto se debe a que Java utiliza referencias . Cuando creó el objeto o , un nuevo objeto creado en el montón y o ahora apunta a esa ubicación, o o hace referencia a la dirección del objeto recién creado. Ahora ha agregado el objeto o a la lista, por lo que la lista tiene una referencia a la misma ubicación (llamémosla ubicación por el momento). Ahora hiciste un punto . operación a la referencia o , que en realidad cambia el valor de la variable miembro en el objeto. Y ahora hizo la referencia o para señalar a ninguna parte o simplemente configuró la referencia como nula . Pero la referenciaa la misma ubicación existe en la lista, no ha cambiado esa referencia. Por lo tanto, no obtendrá NPE y cambiará el valor anteriormente utilizando el operador de punto (.) . Espero haber arrojado algo de luz.

Respuesta: 2

Mi objetivo es crear una JTable y renderizar solo las celdas de la columna del extremo izquierdo, con el objetivo de crear encabezados de fila para la tabla. Todos los ejemplos de tablas de filas que he encontrado en línea parecen complicados o no ...

Necesito identificar las excepciones de fallas de conexión de la base de datos frente a otras excepciones y manejarlas en consecuencia dentro de mi controlador de errores de escucha kafka. Como todo se convierte a DataAcccessException en ...

La única forma que he encontrado de dibujar parte de una imagen es con esta función drawImage: public abstract boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2 , ...

Obtuve el siguiente SQL que quería transformar en HQL válido. El problema con esto es que no está permitido unirse en una subconsulta según los documentos. Aunque estos son documentos antiguos (v3.3) esto ...