当前位置: 首页 > 面试题库 >

Java中数组的默认初始化是什么?

秦跃
2023-03-14
问题内容

所以我要声明并初始化一个int数组:

static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
    arr[i] = UN;
}

说我改为这样做…

int[] arr = new int[5];
System.out.println(arr[0]);

… 0将按标准输出。另外,如果我这样做:

static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);

... true将按标准输出。那么Java默认如何初始化我的数组?是否可以安全地假设默认的初始化将数组索引设置为零,0这意味着我不必遍历数组并对其进行初始化?


问题答案:

Java程序中未由程序员明确设置为所有内容的所有内容都初始化为零值。

  • 对于的引用(任何包含对象的内容)null
  • 对于int / short / byte / long,它是一个0
  • 对于float / double,这是一个 0.0
  • 对于布尔值,则为false
  • 对于char是空字符'\u0000'(其十进制等效值为0)。

当你创建某物的数组时,所有条目也会被清零。因此,你的数组在由创建后立即包含五个零new。

注意(基于注释):分配局部变量时,不需要Java虚拟机将基础内存清零(如果需要,这可以进行有效的堆栈操作),因此为了避免随机值,Java语言规范要求初始化局部变量。



 类似资料:
  • 根据我的参考,基元类型具有默认值,对象为null。我测试了一段代码。 行将是指向变量的错误,表示,而在给定引用中,将作为默认值。但是,使用下面给定的代码,它将实际打印。 第一个代码可能会出什么问题?类变量的行为是否与局部变量不同?

  • 考虑以下代码 VS2013编译器发出以下警告: 警告C4351:新行为:数组“B::member”的元素将默认初始化1 这里有记载 使用C 11,并应用“默认初始化”的概念,意味着B. part的元素将不会被初始化。 但我认为,成员{}应该执行值初始化,而不是默认初始化。VS2013编译器是否损坏? 8.5美元/6 默认初始化类型为T的对象意味着:-如果T是(可能是cv限定的)类类型(第9条),则

  • 问题内容: 假设我有一个枚举,然后实例化一个天数组。 如何将一天(例如)设置为所有“天”的默认值?如果如上所述进行设置,则所有元素均为空。我希望通过枚举表现得更像ints和Strings,它们分别初始化为0和“”。 问题答案: 正如其他人所说,枚举是引用类型-它们只是特定类的编译器语法糖。JVM不了解它们。这意味着该类型的默认值为null。当然,这不仅会影响数组- 这意味着类型为枚举的任何字段的初

  • 问题内容: 如果我在代码中使用如下语句 它将数组初始化为特定的东西吗?(例如0)我似乎记得此文件记录在某处,但我不确定要搜索什么。 问题答案: JLS说,在15.10数组创建表达式中 […]创建具有指定长度的一维数组,并将数组的每个组件初始化为其默认值 在4.12.5变量的初始值处表示: 对于type ,默认值为零,即。

  • 我在Visual Studio2019中有一个Xamarin表单解决方案。我现在只使用Android版本。完整的错误是: 在此进程中,java.lang.IllegalStateException Message=Default FirebaseApp未初始化AppCardView.Sample.android。确保首先调用FirebaseApp.InitializeApp(上下文)。 在我的An

  • 鉴于memset只能用于初始化值为0或-1的整数数组,您使用它进行零初始化的原因是什么。它的功效仅仅在于字符串初始化吗? 后一种方式不总是更好吗?