这些运营商在做什么? String key = offset == -1? keyStroke:keyStroke.substring(offset + 1);

时间:2017-06-24 05:04:50

标签: java operators

String key = offset == -1 ? keyStroke : keyStroke.substring( offset + 1 ); 我在网上发现了一些代码的例子,它包含了我不理解的这一行。

这是key binding example中的一段代码。具体来说,“KeyboardAnimation.java”第37行。

这可能是一个愚蠢的问题,但我不知道这里发生了什么。我可以花很长时间做研究,但我觉得这可以很容易地被某人解释(我可以详细了解我的推理,但它不是重点)。

我知道它将key类型的变量String设置为某种东西。 keyStroke是一个字符串,其格式与按键的方式相同:

  

解析字符串并返回KeyStroke。该字符串必须具有以下>语法:
  *(|)

     

修饰符:= shift |控制| ctrl | meta | alt |同时按下AltGraph

     

typedID:= typed

     

typedKey:=长度为1的字符串,给出Unicode字符。

     

pressedReleasedID:=(按下|已释放)键

     

key:= KeyEvent密钥代码名称,即“VK _”后的名称。

     

如果未指定键入,按下或释放,则按下。以下是一些示例:

"INSERT" => getKeyStroke(KeyEvent.VK_INSERT, 0);
"control DELETE" => getKeyStroke(KeyEvent.VK_DELETE, InputEvent.CTRL_MASK);
"alt shift X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK);
"alt shift released X" => getKeyStroke(KeyEvent.VK_X, InputEvent.ALT_MASK | InputEvent.SHIFT_MASK, true);
"typed a" => getKeyStroke('a');

(来自:KeyStroke javax.swing.KeyStroke.getKeyStroke(String s))

现在,进入我实际上不知道的东西:为什么它似乎有一个布尔运算符?问号有什么作用?结肠做了什么?

我觉得这是我之前应该学到的东西,但却没有......

1 个答案:

答案 0 :(得分:1)

String key = offset == -1 ? keyStroke :  keyStroke.substring( offset + 1);

这是一个变量声明和初始化。它定义了一个变量:

String key

并立即初始化:

String key = ...;

现在,用于初始化字符串的右侧值是什么?它是一个三元语句,表达形式:

condition ? valueIfTrue : valueIfFalse

如果布尔表达式valueIfTrue为真,则此表达式的值为condition,如果布尔表达式valueIfFalse为假,则为condition

在您的情况下,如果keyStroke为真,则使用offset == -1的值初始化键变量,如果keyStroke.substring( offset + 1 )为假,则使用值offset == -1初始化。

整件事可以改写为

String key;
if (offset == -1) {
    key = keyStroke;
} 
else {
    key = keyStroke.substring(offset + 1);
}