Initialize arrays using ternary operator

让人想犯罪 __ 提交于 2019-12-08 15:58:40

问题


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!


回答1:


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.




回答2:


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



回答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.



来源:https://stackoverflow.com/questions/1796791/initialize-arrays-using-ternary-operator

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!