Java 数组对象和初始化器混淆

标签 java

我正在学习 java,并被告知数组是作为对象实现的。但他们显示了两种不同的代码,但没有深入探讨细节。

首先他们要求我们使用这样的数组,但缺点是需要手动添加值:

int nums[] = new int[10];  
nums[0] = 99;
nums[1] = -622;
.
.
.

然后他们在一些程序中使用它,说不需要 new,因为 Java 会自动做一些事情:

int nums[] = {99, - 10, 100123, 18, - 972 ......}

如果第二个代码更短并且允许我直接使用数组,如果它们做同样的事情但第一个代码需要更多代码来手动输入值,那么第一个代码的意义何在。

最佳答案

假设您要初始化一个包含 100 万个值的数组,您会使用第二种方法吗?不,因为你会有一个巨大的 java 文件。

第一种方法本质上是分配空间:

int[] array = new int[1000000];

在内存中创建100万个空间,默认值为0。现在如果你想初始化它们,你可以使用循环:

for (int i = 0; i < array.length; i++) {

    array[i] = i;
}

如果您想要一个包含 1000 万个值的数组,则只需更改一个数字:

// Just add a 0 to 1000000
int[] array = new int[10000000]

现在,如果数组的大小发生变化,则不必更改循环。但是,如果您使用第二种方法并想要一个包含 1000 万个值的数组,则必须向您的 java 文件添加 900 万个值和 900 万个逗号 - 不可扩展。

int[] array = {1, 2, 3, 4, ... 1000000};

第二种方法不是“可扩展的”。它仅适用于小型数组,您可以放心地假设该数组的默认值不会更改。否则,使用第一种(更常见)方法更有意义。

关于Java 数组对象和初始化器混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51129838/

相关文章:

java - 在从 Java 应用程序调用 getQueryResults 方法时,如何从 QueryResponse 访问架构?

java - 在 facebook 墙上发帖总是显示登录页面..问题 android

JavaFx:fxmlLoader.load 返回父级?

java - f :convertDateTime support for Java8 LocalDate/LocalDateTime?

java - Blackberry Touch 事件检测触摸位置上的对象

java - 使用不同的定位器定位 WebElement(NoSuchElementException)

java - 尝试在泛型类中应用 lambda 表达式时出现类型不匹配编译错误

java - 从数据库加载 Spring PropertyPlaceholderConfigurer

java - 两个服务器之间不共享 session

java - 扩展接口(interface)