使用三元运算符初始化数组

发布于 2024-08-12 08:25:35 字数 224 浏览 8 评论 0原文

我尝试过这样的事情:


boolean funkyBoolean = true;
int array[] = funkyBoolean ? {1,2,3} : {4,5,6};

但是这段代码甚至无法编译。 对此有什么解释吗? 不是 funkyBoolean 吗? {1,2,3} : {4,5,6} 是一个有效的表达式吗? 提前致谢!

i tried something like this:


boolean funkyBoolean = true;
int array[] = funkyBoolean ? {1,2,3} : {4,5,6};

But this code won't even compile.
Is there any explanation for this? isn't funkyBoolean ? {1,2,3} : {4,5,6} a valid expression?
thank's in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一张白纸 2024-08-19 08:25:35

您只能在非常有限的情况下使用 {1, 2, 3} 语法,而这不是其中之一。试试这个:

int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};

顺便说一句,好的 Java 风格是将声明编写为:

int[] array = ...

编辑:根据记录, {1, 2, 3} 受到如此限制的原因是它的类型不明确。理论上它可以是整数、长整型、浮点数等的数组。此外,JLS 定义的 Java 语法禁止它,所以就是这样。

You can only use the {1, 2, 3} syntax in very limited situations, and this isn't one of them. Try this:

int array[] = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};

By the way, good Java style is to write the declaration as:

int[] array = ...

EDIT: For the record, the reason that {1, 2, 3} is so restricted is that its type is ambiguous. In theory it could be an array of integers, longs, floats, etc. Besides, the Java grammar as defined by the JLS forbids it, so that is that.

情仇皆在手 2024-08-19 08:25:35
boolean funkyBoolean = true;
int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
boolean funkyBoolean = true;
int[] array = funkyBoolean ? new int[]{1,2,3} : new int[]{4,5,6};
各空 2024-08-19 08:25:35

可以指定数组初始值设定项
在声明中,或作为声明的一部分
数组创建表达式 (§15.10 ),创建一个数组并提供一些初始值

这就是 Java 规范 说 (10.6)。因此,“短”版本(带有创建表达式)仅允许在声明中使用 (int[] a = {1,2,3};),在所有其他情况下,您需要一个 new int[]{1,2,3} 构造,如果你想使用初始化器。

An array initializer may be specified
in a declaration, or as part of an
array creation expression (§15.10), creating an array and providing some initial values

That's what the Java Spec says (10.6). So the 'short' version (with the creation expression) is only allowed in declarations (int[] a = {1,2,3};), in all other cases you need a new int[]{1,2,3} construct, if you want to use the initializer.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文