java可以初始化类似C++的对象数组中的对象,而不必循环调用新的对象吗? C++中的代码卡[20 ];初始化20个卡片对象,而在Java中,代码Card[]cards=new Card[20];初始化一个可以容纳20个卡对象的数组,但卡对象实际上没有初始化。你必须这样做 for (int i = 0; i < cards.length; i++) { cards[i] = new Card(); } 有没有办法避免在java中这样做,类似C++(?)/p>< P>不,没有。

java可以初始化类似C++的对象数组中的对象,而不必循环调用新的对象吗? C++中的代码卡[20 ];初始化20个卡片对象,而在Java中,代码Card[]cards=new Card[20];初始化一个可以容纳20个卡对象的数组,但卡对象实际上没有初始化。你必须这样做 for (int i = 0; i < cards.length; i++) { cards[i] = new Card(); } 有没有办法避免在java中这样做,类似C++(?)/p>< P>不,没有。,java,c++,arrays,initialization,Java,C++,Arrays,Initialization,数组元素是值 对于引用类型,该值是一个引用。引用的默认初始化值为null。这是数组中每个元素将被初始化为的值。您必须自己显式初始化元素以引用新对象 对于基元类型,该值是基元类型值、字符、整数、浮点值或布尔值。这些的默认值分别为“\u0000”、0、0.0和false。这是数组中的每个元素将被初始化为的值。不,没有一种纯粹的数组方式来完成您想要的操作。如果您不想显式地使用循环来解决这个问题,那么另一种方法是使用Java8中添加的流 Card[] cards = Stream.generate(C

数组元素是值

对于引用类型,该值是一个引用。引用的默认初始化值为null。这是数组中每个元素将被初始化为的值。您必须自己显式初始化元素以引用新对象


对于基元类型,该值是基元类型值、字符、整数、浮点值或布尔值。这些的默认值分别为“\u0000”、0、0.0和false。这是数组中的每个元素将被初始化为的值。

不,没有一种纯粹的数组方式来完成您想要的操作。如果您不想显式地使用循环来解决这个问题,那么另一种方法是使用Java8中添加的流

Card[] cards  = Stream.generate(Card::new).limit(20).toArray(Card[]::new);
或者,也许使用将不那么神秘

Card[] cards  = new Card[20];
Arrays.setAll(cards, i -> new Card());

java卡的C++等价物[CARC] =新卡[20 ];大概是卡片*卡片[20];或std::阵列卡;在现代C++中,

并且,事实上,如果你希望这些指针实际指向内存中的卡对象:

,那么你必须显式初始化C++中的每个数组元素。
for (int i = 0; i < 20; ++i)
{
    cards[i] = new Card;
}

<> P> C++卡卡(20)没有Java等价物,原因与C++卡单java卡没有java等价物;p> 在Java中,不能声明对象,只能声明对象引用。@HotLicks信不信由你,有些人的声明实际上更简单、更清晰:@HotLicks对我来说,是的,但这取决于个人偏好:无论如何,这只是一种选择。无意冒犯,但这看起来像是直接从代码混淆比赛中获得的。这种编码风格真的被著名的Java专家认为是优越的吗?看起来非常复杂,而且为上述目的做了太多的工作。我认为setAll版本读起来更清晰,实际上,这可能比循环更好。原语数组呢?@ChristianHackl原语数组的元素也被初始化为默认值0或false。你是要我在答案中加上这个吗?我现在就这么做。没什么大不了的,但我认为你的句子java中的数组包含引用。可能会误导某人认为原语数组是不可能的,或者是通过自动装箱实现的。@ChristianHackl是的,我也有这种印象。使它变得越来越干净。字符为“\u0000”