为什么我在此函数中的i ++上收到死代码警告?
InputFilter hexInputFilter()
{
return new InputFilter()
{
@Override
public CharSequence filter(CharSequence source, int start,
int end, Spanned dest, int dstart, int dend)
{
for (int i = start; i < end; i++)
{
if ((source.charAt(i) >= '0')
&& (source.charAt(i) <= '9'))
{
return null;
}
if ((Character.toUpperCase(source.charAt(i)) >= 'A')
&& (Character.toUpperCase(source.charAt(i)) <= 'F'))
{
return null;
}
return "";
}
return null;
}
};
}
答案 0 :(得分:55)
由于您要返回,for
不可能循环多次:
return "";
因此,i++
将不会被执行,这就是为什么你会收到死代码警告的原因。您可能希望删除return "";
和/或将其放在for
之外。
答案 1 :(得分:13)
这是因为i++
通常在for-block结束后执行,并且在你的函数中永远不会到达for-block的结尾,因为在块中你无条件地返回一个值。
for-loop
for (A; B; C) {
D;
}
在内部翻译成以下内容:
A;
while (B) {
D;
C;
}
您可以看到,如果D
始终从函数返回,则永远不会达到C
。这就是投诉的内容。
答案 2 :(得分:5)
由于return "";
语句,你只会执行一次循环。
答案 3 :(得分:3)
在您的情况下,以下语句导致问题,因为它无条件运行,并且将始终在执行for循环时运行。所以它永远不会达到i ++所以它的死代码。
return "";