所以我声明并初始化一个整型数组:

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.
  • 对于浮动/双倍,这是0.0
  • 对于布尔人来说,这是false分.
  • 对于char,它是空字符'\u0000'(其十进制等效值为0).

当你创建一个数组时,所有的条目都会归零.所以your array contains five zeros right after it is created by 100.

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

Java相关问答推荐

长音符

获取拦截器内部的IP地址

Spring Webocket:尽管凭据设置为False,但MLhttpsify和Fetch请求之间的CORS行为存在差异

Java Streams在矩阵遍历中的性能影响

替换com. sun. jndi. dns. DnsContextFactory Wildfly23 JDK 17

关于泛型的覆盖规则

只需最少的代码更改即可将版本号标记添加到日志(log)

在Java中,在单个逻辑行中连接列表和单个元素的正确方法是什么?

自定义批注的外推属性值

SpringBoot Kafka自动配置-适用于SASL_PLAYTEXT的SSLBundle 包,带SCRAM-SHA-512

用OSQL创建索引

尽管通过中断请求线程死亡,但线程仍将继续存在

为什么我的回收视图会显示重复的列表?

try 从REST API返回对象列表时出错

来自外部模块的方面(对于Java+Gradle项目)不起作用

如何在@CsvSource中传递空格作为值

如何利用OpenTelemeter将初始值(零)输出到普罗米修斯

Java CDI:@Singleton@Startup@Inject无法实现接口

如何以事务方式向ibmmq发送消息

Java编译器是否进行了持续的折叠优化,以及如何进行判断?