【问题标题】:IntelliJ IDEA warning "value is never used"IntelliJ IDEA 警告“从未使用过值”
【发布时间】:2015-09-08 16:16:58
【问题描述】:

我写了一个计算单词最大排列数量的方法,但 IntelliJ IDEA 给了我警告:

从未使用分配给“permutationAmount”的值长度 - 1

private static int permutationsPossible(String word) {
    //Amount of letters in word.
    int length = word.length();

    //Return length if length is less than or equal to 1.
    if (length <= 1)
        return length;

    //Calculate maximum amount of permutations.
    int permutationAmount = length;
    for (int i = 1; i < length - 1; i++)
        permutationAmount *= (length - i);
    return permutationAmount /= length - 1;
}

但是,当我像这样创建 helper int 时不会显示警告:

    permutationAmount = permutationAmount /= length - 1;
    return permutationAmount;

该程序双向运行都很好,我只想知道,为什么 IntelliJ 会警告我从未使用过 'length - 1'?

截图:https://i.gyazo.com/886d7ab8b06398fb7dd0809a7d1bbaf3.png

【问题讨论】:

  • 你做了一个没有必要的赋值,因为你从不直接从被覆盖的变量赋值后使用这个新值。

标签: java intellij-idea int warnings helper


【解决方案1】:

您在 return 语句中无缘无故地分配回 permutationAmount(警告的原因)。

return permutationAmount / (length - 1);

棘手的部分可能是,虽然 看起来 您在 return 语句中返回了 permutationAmount 的值(因此会读取分配的值),但实际上并非如此。 return 语句实际上返回了赋值操作的结果,因此 permutationAmount 在赋值后不会再被实际读取。

【讨论】:

  • 不敢相信我没有看到这个,谢谢!我想知道为什么 IntelliJ 没有给我这个修复。
【解决方案2】:

这是因为您无缘无故地更改了permutationAmount 的值。您不会在返回后再次使用新值,因此您实际上没有必要更改 return 行中的变量值。您可以通过执行

来完成相同的事情,而不是实际更改值
return permutationAmount / length - 1;

在您的第二个示例中,您使用的是更改后的新值,如果您实际上并未更改该值,则返回将不正确。

【讨论】:

    【解决方案3】:

    这是当我在 IntelliJ 中展开该警告框时出现的文本:

    此检查指出了变量值在赋值后从未使用过的情况,即:

    • 变量在赋值后永远不会被读取或

    • 在读取下一个变量或之前,该值总是被另一个赋值覆盖

    • 变量初始化器是多余的(出于上述两个原因之一)或

    • 从未使用过该变量。

    看来这个警告是因为第一个原因触发的:你在分配变量后再也没有读取过它。这没有多大意义,因为您会立即返回变量。

    但是,将值分配给局部变量然后立即返回它并没有多大意义。此行将执行相同的逻辑,而不分配给变量:

    return permutationAmount / (length - 1);
    

    所以并不是说这个变量从来没有被使用过,因为我们假设这个方法的调用者会读取这个方法返回的值,但是给这个变量赋值是没有用的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 2018-12-11
      • 2013-04-02
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多