我们需要在Java中初始化数组吗?

时间:2016-03-29 21:10:07

标签: java

我注意到如果我将数组声明为:

CREATE OR REPLACE PACKAGE manager_faculty IS
     PROCEDURE delete_stud (nr_matr student.nr_matricol%type);
END manager_faculty;
/

CREATE OR REPLACE PACKAGE BODY manager_faculty IS

    PROCEDURE delete_stud (nr_matr student.nr_matricol%type) IS
    BEGIN
       DELETE from student
         WHERE nr_matricol=nr_matr;
    EXCEPTION
       WHEN no_data_found THEN
      SELECT COUNT(*) INTO counter FROM student WHERE nr_matricol=nr_matr;
      IF counter = 0 THEN
         raise_application_error (-20001, 'There is no student with the number' || nr_matr);
      END IF;
    END delete_stud;

END manager_faculty;
/

set serveroutput on;
BEGIN
manager_faculty.delete_stud(125);
END;
/

我可以直接使用int[] myarr = new int[10]; 以便myarr[1] ++;。这是否意味着在Java中,我们需要初始化数组并通过以下方法将每个值设置为0?

myarr[1] = 1

我从一些评论中看到,该数组可能包含垃圾值。如果数组是整数数组,它是否包含0以外的任何垃圾?

5 个答案:

答案 0 :(得分:11)

在Java中,所有数组元素都自动初始化为默认值。对于原始数字类型,00.0。对于布尔人来说,那是false。对于对象,null

在其他语言(如C ++)中,未初始化数组中的值未定义。对于安全性,一些编译器可能会初始化为0 / null,依赖于此,这是非常糟糕的做法。但是,这种行为在Java中已经很好地定义了,因此创建一个原始数组并相信值为0是完全可以的。

答案 1 :(得分:5)

根据语言规范,新初始化的int[]将填充零。

参考JLS §10.6 (Array Initializers)

  

创建一个具有指定长度的一维数组,并将数组的每个组件初始化为其默认值(§4.12.5)。

参考§4.12.5

  
      
  • 每个类变量,实例变量或数组组件在创建时都使用默认值进行初始化(§15.9,§15.10.2):      
        
    • 对于type byte,默认值为零,即(byte)0。
    • 的值   
    • 对于short类型,默认值为零,即(short)0。
    • 的值   
    • 对于int类型,默认值为零,即0。
    •   
    • 对于long类型,默认值为零,即0L。
    •   
    • 对于float类型,默认值为正零,即0.0f。
    •   
    • 对于double类型,默认值为正零,即0.0d。
    •   
    • 对于char类型,默认值为空字符,即'\ u0000'。
    •   
    • 对于类型boolean,默认值为false。
    •   
    • 对于所有引用类型(第4.3节),默认值为null。
    •   
  •   

答案 2 :(得分:4)

不,所有java数组都填充了适当类型的默认值(0表示整数,0.0表示双精度数,null表示引用,...)

答案 3 :(得分:0)

您不能跳过数组初始化,但您不必初始化数组的每个元素。如果没有初始化数组中的元素,它的工作方式与初始化特定类型的成员变量的方式完全相同:Java将使用类型默认值初始化它,对于数字基元类型为0(int, booans为double,float ...), false ,对象为null(包括String)。

答案 4 :(得分:-3)

不,必须在java中初始化一个数组。当我编写程序时,我没有初始化我的数组,而我的编译器(jdk7)给了我一个错误:

ArrayOne.java:4:变量myArray可能尚未初始化。

因此我的编辑失败了。