当前位置: 首页 > 知识库问答 >
问题:

Java的三元/条件运算符(?:)可以用来调用方法而不是赋值吗?

萧升
2023-03-14

在像http://en.wikipedia.org/wiki/?这样的页面中:三元/条件运算符?:似乎用于条件赋值。我尝试将其用于方法调用,如下所示:

(condition) ? doThis() : doThat();

两个方法都返回void。Java告诉我这不是声明。

所以,我猜我不能做条件方法调用...或者我可以吗?

共有1个答案

黎阳冰
2023-03-14

把三元运算符想成本例中的一个方法。说a?b:c(出于您所考虑的意图和目的,请参阅Lasseespeholt的注释)等同于调用pseudocode方法:

ternary(a, b, c)
    if a
        return b
    else
        return c

这就是为什么人们可以说x=a?b:C;这基本上就像说x=三元(a,b,c)。当你说(条件)时?doThis():doThat(),实际上是在说:

if condition
    return doThis()
else
    return doThat()

看看如果我们试图用这些方法来代替它们返回的结果会发生什么

 if condition
    return ???
 else
    return ???

甚至考虑都没有意义。dothis()dothat()不返回任何东西,因为void不是可实例化类型,所以ternary方法也不能返回任何东西,所以Java不知道如何处理您的语句,并抱怨。

有一些方法可以解决这一问题,但它们都是糟糕的做法(您可以修改方法使其具有返回值,但对返回的值不做任何处理,您可以创建调用方法的新方法,然后返回null,等等)。在这种情况下,最好只使用if语句。

此外,还有一个更大的问题。即使返回值,Java也不认为是一个?b:C任何意义上的语句。

 类似资料:
  • 问题内容: 在http://en.wikipedia.org/wiki/?之类的页面中:三元/条件运算符似乎用于条件赋值。我试图将其用于方法调用,如下所示: 两种方法都返回void。Java告诉我这不是一个声明。 所以,我猜我不能进行条件方法调用…还是可以吗? 问题答案: 在这种情况下,将三元运算符视为一种方法。说的话(出于您正在考虑的目的和目的,请参阅lasseespeholt的评论)等同于调用

  • 赋值运算符是指为变量或常量指定数值的符号。赋值运算符的符号为“=”,它是双目运算符,左边的操作数必须是变量,不能是常量或表达式。 其语法格式如下所示: 在 Java 语言中,“变量名称”和“表达式”内容的类型必须匹配,如果类型不匹配则需要自动转化为对应的类型。 赋值运算符的优先级低于算术运算符,结合方向是自右向左;不是数学中的等号,它表示一个动作,即将其右侧的值送到左侧的变量中(左侧只允许是变量,

  • 实际上,三元运算符的语言示例中是否有一个内置的不是以下形式的(条件运算符)? 我不是在找一种特定的语言,虽然至少有中等程度的流行度会更好。

  • 三元运算符 三元运算符 ? 应该只用在它能让代码更加清楚的地方。 一个条件语句的所有的变量应该是已经被求值了的。类似 if 语句,计算多个条件子句通常会让语句更加难以理解。或者可以把它们重构到实例变量里面。 推荐: result = a > b ? x : y; 不推荐: result = a > b ? x = c > d ? c : d : y; 当三元运算符的第二个参数(if 分支)返回和条

  • 问题内容: 如果Python没有三元条件运算符,是否可以使用其他语言构造来模拟一个? 问题答案: 它是在2.5版中添加的。表达式语法为: 第一被评估,则恰好中的任一个a或b进行评估并返回基于所述布尔值。如果为,则被评估并返回但被忽略,否则被评估为返回但被忽略。 这允许发生短路,因为仅当评估为时才进行评估,而b根本不评估,而当为 评估时,仅当评估时就完全不评估。 例如: 注意条件是表达式,而不是语句

  • 如果Python没有三元条件运算符,是否可以使用其他语言构造来模拟一个?