6

IntelliJ IDEA 抱怨此代码:

char c = 'A';
if (c == 'B') return;

警告在第二行:

Implicit numeric conversion from char to int

这是什么意思?它希望我做什么?

4

3 回答 3

2

对此的解释隐藏在 JLS 中。它指出这==是一个数字运算符。如果您阅读文本并点击一些链接,您会发现char转换为int. 它从未明确表示如果两个操作数都是,也会发生这种情况,char但它

Widening primitive conversion (§5.1.2) is applied to convert either or both operands as specified by the following rules:

* If either operand is of type double, the other is converted to double.

* Otherwise, if either operand is of type float, the other is converted to float.

* Otherwise, if either operand is of type long, the other is converted to long.

* Otherwise, both operands are converted to type int.

我认为最后一个隐含的意思char是总是被转换的。同样在另一部分中它说"If either operand is not an int, it is first widened to type int by numeric promotion."

您收到的警告可能非常严格,但似乎是正确的。

于 2013-10-22T14:40:14.750 回答
0

使用静态Character.compare(char x, char y)方法可能比使用==.

我在 JLS 或 JavaDoc 中没有发现任何内容,但是使用您的方法可能存在潜在的 unicode 错误。您发布的警告表明您的字符可以扩展到整数,这可能会产生性能问题,但我真的对此表示怀疑。我会继续寻找,因为现在我对此感兴趣。

于 2013-10-22T14:31:30.383 回答
0

所有字符都由编译器转换为 int。你甚至可以这样做:

char a = 'b';  
int one = a - 46;// it's 40 something...  

您可以通过将角色转换为 int 来消除此警告。

char c = 'A';
if (c == (int)'B') return;

或者

您可以使用Character对象和使用equal方法来比较它。

于 2013-10-22T14:49:46.197 回答