IntelliJ IDEA 抱怨此代码:
char c = 'A';
if (c == 'B') return;
警告在第二行:
Implicit numeric conversion from char to int
这是什么意思?它希望我做什么?
IntelliJ IDEA 抱怨此代码:
char c = 'A';
if (c == 'B') return;
警告在第二行:
Implicit numeric conversion from char to int
这是什么意思?它希望我做什么?
对此的解释隐藏在 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."
。
您收到的警告可能非常严格,但似乎是正确的。
使用静态Character.compare(char x, char y)
方法可能比使用==
.
我在 JLS 或 JavaDoc 中没有发现任何内容,但是使用您的方法可能存在潜在的 unicode 错误。您发布的警告表明您的字符可以扩展到整数,这可能会产生性能问题,但我真的对此表示怀疑。我会继续寻找,因为现在我对此感兴趣。
所有字符都由编译器转换为 int。你甚至可以这样做:
char a = 'b';
int one = a - 46;// it's 40 something...
您可以通过将角色转换为 int 来消除此警告。
char c = 'A';
if (c == (int)'B') return;
或者
您可以使用Character
对象和使用equal
方法来比较它。