Control de matriz y memoria de las habilidades básicas del programador JAVA

     Recientemente, planeo repasar los conceptos básicos de JAVA nuevamente, y leer las "16 lecciones para los programadores de Java Rompiendo" por el Sr. Li Gang, y aprovechar esta oportunidad e inspiración para resumir los puntos de conocimiento fácilmente pasados ​​por alto en JAVA.

Inicialización de matriz

      JAVA es un lenguaje estático típico, por lo que la matriz de Java es estática, es decir, cuando la matriz se inicializa, la longitud de la matriz es inmutable. El objeto de matriz debe inicializarse antes de que se utilice la matriz de Java. La denominada inicialización consiste en asignar espacio de memoria para todos los elementos de la matriz y especificar el valor inicial para cada elemento de la matriz.

     La variable de matriz de JAVA es una variable de tipo de referencia, no es el objeto de matriz en sí, siempre que la variable de matriz apunte a un objeto de matriz válido, la variable de matriz se puede utilizar en el programa. (Nota la diferencia entre las variables de matriz , objetos de matriz , y elementos de la matriz )

      Una variable de matriz es solo una variable de referencia (algo similar a un puntero en el lenguaje C), generalmente almacenada en la memoria de pila (también se puede colocar en la memoria de pila); y el objeto de matriz es un espacio de memoria continuo almacenado en la pila memoria. La inicialización de la matriz no es en realidad la inicialización de la variable de matriz, sino la inicialización del objeto de matriz, es decir, se asigna un espacio de memoria contiguo para el objeto de matriz, y la longitud de este espacio de memoria es la longitud de la matriz. .

public class ArrayTest {

    public static void main(String[] args) {
        //采用静态初始化方式初始化第1个数组
        String[] books = new String[]{
                "疯狂java讲义",
                "轻量级Java EE企业级应用实战",
                "疯狂Ajax讲义",
                "疯狂XML讲义"
        } ;
        //采用静态初始化的简化方式初始化第2个数组
        String[] names = {
            "孙悟空",
            "猪八戒",
            "白骨精"
        };
        //采用动态初始化方式初始化第3个数组
        String[] strArr = new String[5];
        //测试
        System.out.println("第一个数组长度为:"+books.length);
        System.out.println("第二个数组长度为:"+names.length);
        System.out.println("第三个数组长度为:"+strArr.length);
        
        //让books数组变量,strArr数组变量指向names所引用的数组
        books = names;
        strArr = names;
        System.out.println("------------------");
        System.out.println("books数组长度为:"+books.length);
        System.out.println("strArr数组长度为:"+strArr.length);
        //改变books数组变量所引用的数组的第二个元素值
        books[1] = "唐僧";
        System.out.println("names数组的第二个元素为:"+books[1]);
    }
}


resultado:
第一个数组长度为:4
第二个数组长度为:3
第三个数组长度为:5
------------------
books数组长度为:3
strArr数组长度为:3
names数组的第二个元素为:唐僧

Control de memoria

La siguiente figura es un diagrama esquemático de variables de referencia de matriz y objetos de matriz en la memoria:




Todas las variables locales se almacenan en la memoria de la pila, ya sean tipos básicos de variables o variables de tipo de referencia, se almacenan en su área de pila de métodos respectiva; pero el objeto al que hace referencia la variable de tipo de referencia (matriz, objetos Java ordinarios) siempre se almacena en la memoria del montón.


Usar matriz  

     Cuando la variable de referencia de matriz apunta a un objeto de matriz válido, el programa puede acceder al objeto de matriz a través de la variable de referencia de matriz. El lenguaje Java no permite el acceso directo a los datos en la memoria de pila, por lo que no se puede acceder directamente al objeto de matriz en la memoria de pila. El programa accederá a la matriz a través de la variable de referencia de matriz.

     La esencia de las matrices multidimensionales sigue siendo matrices unidimensionales. Cuando un programa JAVA usa una matriz, el programa debe controlarse desde la perspectiva del control de la memoria, no solo en la superficie del código.

Supongo que te gusta

Origin blog.csdn.net/liushulin183/article/details/50059791
Recomendado
Clasificación