Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内存中的对象数组_Java_Arrays_Heap - Fatal编程技术网

Java 内存中的对象数组

Java 内存中的对象数组,java,arrays,heap,Java,Arrays,Heap,我有一些关于数组的基本问题 假设我声明了一个整数数组 int intArray[] = new intArray[10]; intArray[0] = 10; intArray[1] = 20; // and so on... intArray如何存储在内存中(我指的是数组的元素) 假设我声明了某种类型的对象数组,比如Employee class Employee { int x = 10; int y = 20; Employee(int x, int y)

我有一些关于数组的基本问题

  • 假设我声明了一个整数数组

    int intArray[] = new intArray[10];
    intArray[0] = 10;
    intArray[1] = 20;
    // and so on...
    
  • intArray
    如何存储在内存中(我指的是数组的元素)

  • 假设我声明了某种类型的对象数组,比如
    Employee

    class Employee {
        int x = 10; 
        int y = 20; 
    
        Employee(int x, int y) {
            this.x = x;
            this.y = y;
        }
    }
    
    class TestEmployee {
        public void main(String args[]) {
            Employee empArray = new Employee[10];
            empArray[0] = new Employee(10, 20);
            empArray[1] = new Employee(30, 40);
            ...
        }
    }
    
  • emparay
    在内存中是什么样子的

  • int
    数组:将有一个内存块,其大小是存储值的
    int
    的10倍

  • Employee
    数组:将有一个内存块,其大小是对象引用的10倍,每个元素将引用内存中其他地方的
    Employee
    对象(或者它将为
    null


  • 考虑以下图像。第一幅图显示了基本类型数组(byte、short、int、long、float、double、char、boolean)如何存储在内存中

    作为对象的数组本身使用new关键字进行实例化,并在堆中分配一些内存。但是s由于它是一个基本类型数组,它直接存储的基本类型值与其大小相同。这些值被设置为0(在int基元类型数组的情况下),除非我们使用
    intArray[0]=10这样的指令明确地更改它们

    但是,在引用类型数组的情况下,有一个有趣的区别数组本身在使用new关键字实例化后,会在堆上分配一些内存空间。但它不直接存储对象,而是存储对其所持有对象的引用。这些引用将为null,或者指向内存中某个位置的相应对象的引用(或地址)。对每个对象的引用都具有默认值null,除非使用类似于
    empArray[0]=newemployee(10,20)的指令对其进行更改

    关于你的后续问题,在一个链表中,假设我试图找到一个位于,比如说从列表头开始的第11个位置的对象,我必须迭代10次才能找到它。因此,linkedlist中元素的大小和位置将影响检索元素所需的时间。然而,在数组中,我只需要知道索引,它就会在一个恒定的时间内找到元素


    Java不是一种好的编程语言,不适合使用,也不适合确切了解堆上发生了什么。实际上,它尽了最大的努力让程序员不再承担这一责任。java代表你的内存管理,例如垃圾收集、堆分配等。如果你想了解“靠近金属”的发生,我建议你用C或C++。谢谢你的回复,我有一个后续问题。考虑到emp阵列将在内存中的某些位置创建emp对象的引用。为了从数组中检索对象,假设empArray[1]将分两步完成。1.检查EMPARY[1]位置中的参考地址我有一个后续问题。如果我错了,请纠正我。考虑到emp阵列将在内存中的某些位置创建emp对象的引用。为了从数组中检索对象,假设empArray[1]将分两步完成。1.检查EMPARY[1]位置中存在的引用地址。2.转到地址并获取实际对象。它与链表有什么不同?我觉得数组和链表、元素检索都是一样的,我们如何判断数组中的对象检索速度快呢?链表的组织方式与数组不同。在链表中,每个元素都包含对下一个元素的引用。为了在链表中找到元素编号N,您必须遵循从第一个到第二个、第三个的所有链接。。。直到到达元素N。在数组中,您可以直接获得元素编号N,因为您知道元素编号N位于从数组开始的元素的位置N*大小。