【问题标题】:What does the new operator do when creating an array in java?java中创建数组时new操作符有什么作用?
【发布时间】:2010-10-17 07:16:58
【问题描述】:

当我们创建一个类类型的对象时,new 运算符会在运行时分配内存。

说

myclass obj1 = new myclass();

这里myclass() 定义了myclass 的构造器

但是

int arr1[4] = new int[];

new 分配内存,但是int[] 在这里做了什么?

【问题讨论】:

    标签: java arrays memory-management


    【解决方案1】:

    New 分配内存,但是 int[] 在这里做了什么?

    int[] 部分只是指定新分配的内存应该有什么类型。

    但是,由于数组不能动态增长,因此编写 new int[] 没有意义(即使您在声明中指定了 int[4]),您必须像这样编写它

    int arr1[] = new int[4];
    

    或者像这样

    int arr1[] = {1, 2, 3, 4};
    

    JLS 中的相关部分:

    【讨论】:

      【解决方案2】:

      您的代码:

      int arr1[4] = new int[];
      

      不会编译。应该是:

      int arr1[] = new int[4];
      

      将[] 放在数组名称之前被认为是一种好的做法,因此您应该这样做:

      int[] arr1 = new int[4];
      

      通常一个数组被创建为:

      type[] arrayName = new type[size];
      

      上面的[size] 部分指定了要分配的数组的大小。

      为什么我们在创建数组时使用new?

      因为 Java 中的数组是对象。上例中数组arrayName 的名称不是实际的数组,只是一个参考。 new 运算符在堆上创建数组并返回对新创建的数组对象的引用,然后将其分配给arrayName。

      【讨论】:

      • 我不会在int 和[] 之间加空格。
      【解决方案3】:

      上面的程序用下面这行代码声明了一个数组:

      int[] anArray; // 声明一个整数数组

      与其他类型变量的声明一样,数组声明有两个组成部分:数组类型和数组名称。 数组的类型写为type[],其中type是所包含元素的数据类型;方括号是特殊符号,表示此变量包含一个数组。 数组的大小不是其类型的一部分(这就是方括号为空的原因)。与其他类型的变量一样,声明实际上并没有创建一个数组——它只是告诉编译器这个变量将保存一个指定类型的数组。

      【讨论】:

        【解决方案4】:

        创建对象的一个​​实例。 new 在heap 上分配内存。 int arr1[4]=new int[]; 在堆上分配 14 个字节。

        int数组的正确声明如下:

        int[] arr = new int[] {1,2,3};  // legal, array of size 3
        int[] a = new int[100];  // Declare and allocate, array of size 100
        

        【讨论】:

        • 不,int arr1[4]=new int[]; 不会编译,所以它不会在堆上分配任何字节;)
        • @aioobe:同意。但问题是:new 运算符是做什么的
        【解决方案5】:
        int[] a=new int[5];
        
        1. 在上面的数组声明中,int[] 是数组类型,即整数类型数组
        2. a 是数组名,例如声明一个变量'a'-----> int a; 数组 int[] a 的方法相同,其中 [] 表示仅声明数组 diff 是 []

        现在来新的

        new 是一个运算符,这个运算符的作用是什么?

        这个新运算符进入堆内存并分配一个数组(由于 int[])并在数组类型 int(由于 int[5])内分配 5 个值调用引用变量。这里引用变量是数组名,即 a。

        在堆中创建的任何数组都被赋予引用变量 a

                        memory diagram
                        ---------------------
                        |  in heap memory    |
                        |                    |
                        ||------------------ |
                        ||  |   |   |  |  |  |
                        |------------------- |
              /          ---------------------
            /
          /   
        a/
        

        5 个位置为上例中的int[5],并且引用变量指向数组内存位置

        【讨论】:

          猜你喜欢
          • 2017-10-18
          • 2017-10-12
          • 2019-11-12
          • 2012-07-03
          • 2013-04-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多