死码警告?

时间:2011-02-15 13:00:45

标签: java android eclipse

为什么我在此函数中的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;
                }
        };
    }

4 个答案:

答案 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 "";