【问题标题】:Ternary operator inside static array initialization not working as expected静态数组初始化中的三元运算符未按预期工作
【发布时间】:2026-02-02 19:10:01
【问题描述】:

我正在考虑以这种方式使用三元运算符在 Java 中动态初始化数组:

boolean errorMsg = true;
...
String[] elements = new String[] {
    errorMsg ? "single_element" : "1st_element", "2nd_element"
};

如果errorMsgtrue,我只想用1 个元素初始化数组,或者如果errorMsg 是false,则用2 个元素初始化数组。 无论errorMsgtrue 还是false,它总是用后两个元素初始化String[]。为什么会这样?

【问题讨论】:

    标签: java conditional-operator


    【解决方案1】:

    为什么会这样?

    因为errorMsg ? "single_element" : "1st_element" 解析为一个字符串,而您已经有另一个字符串"2nd_element"

    你需要一个 if else 来代替数组本身的初始化,而不是里面的元素。

    String[] elements = errorMsg? new String[] {  "single_element" } : new String[] { "1st_element", "2nd_element" };
    

    但为了让我的初级开发人员开心,我更愿意写

            String[] elements = null;
            if (errorMsg) {
                elements = new String[] { "single_element" };
            } else {
                elements = new String[] { "1st_element", "2nd_element" };
            }
    

    【讨论】:

    • 谢谢,我明白了。我只是在想可以联合返回后面的元素“: "1st_element", "2nd_element"”。但逗号让我很困惑。