一维数组和二维数组存储占用内存是否相同

import java.util.Arrays;

public class OneArrayMemory {

public static void main(String[] args) {
    long startTime1 = System.currentTimeMillis(); // 获取开始时间

    int num1 = 1024 * 1024 * 2;
    int[] arr1 = new int[num1];

    Arrays.fill(arr1, 1);

    // for(int x : arr1){
    // System.out.println(x);
    // }

    // 获得占用内存总数,并将单位转换成MB
    long memory1 = Runtime.getRuntime().totalMemory() / 1024 / 1024;

    System.out.println("用一维数组存储占用内存总量为:" + memory1);


    long endTime1 = System.currentTimeMillis(); // 获取结束时间

    System.out.println("程序运行时间: " + (endTime1 - startTime1) + "ms");

    long startTime2 = System.currentTimeMillis(); // 获取开始时间


    int num2 = 1024 * 1024;

    int[][] arr2 = new int[num2][2];

    for (int[] i : arr2) {
        Arrays.fill(i, 1);
    }

    // for (int[] i : arr2) {
    // for (int j : i) {
    // System.out.print(j);
    // }
    // }

    // 获得占用内存总数,并将单位转换成MB
    long memory2 = Runtime.getRuntime().totalMemory() / 1024 / 1024;

    System.out.println("用二维数组存储占用内存总量为:" + memory2);


    long endTime2 = System.currentTimeMillis(); // 获取结束时间

    System.out.println("程序运行时间: " + (endTime2 - startTime2) + "ms");
}

}

感觉和我的想法有出入啊……

用一维数组存储占用内存总量为:123
程序运行时间: 6ms
用二维数组存储占用内存总量为:123
程序运行时间: 72ms

首先,不管是一维数组还是二维数组都是数组类型(Array),而java中对于数组对象的头部中有三个域,分别是mark,klass和length(如想深入了解,可以看这里 ),其中length代表的是数组的长度,其后才是真正的所存的数据。而一维数组与二维数组最大的不同就是其数组中元素。一维数组中存的是数据本身,而二维数组中存的是指向另外一个一维数组的reference(事实就就是指针)。如果一维数组中元素的长度和引用类型长度相同的话,那一维数组与二维数组在相同元素条件下是内存占用量应该是相等的。如果一维数组元素的长度与引用类型长度不同,比如存的是char类型的数据,我认为就不相等了。你可以试一试。祝好!

占用内存应该是不同,二维的要稍多一些,用于区分数组起始和结束

应该是不一定相同,如楼上

很明显不一样,二维数组比一维数组大一些

二维略大
比如一维数组a[100]和二维数组b[10][10],
a[100]需要分配100个数组类型的大小,
b[10][10]首先需要10个10元数组的内存,这个就已经和上面一样了,另外,还需要一个用来存储这10个数组的起始位置的数组,总共消耗了100个数组类型的内存(用于存储数据),以及10个指针的内存(用于找到之前的10个数据的数组)

二维肯定要多些 需要记录的内容要多些
打个不太合适的比方:
你觉得是记 123456789 好记还是 654 789 321 好记?

二维数组定义时会一维数组多,可以查看JDK文档