局部变量是冗余intellij

时间:2017-03-13 20:41:43

标签: java intellij-idea

public static double getAmount(){
    Scanner reader = new Scanner(System.in);
    System.out.println("random text");
    double amount;
    return (amount = reader.nextDouble());
}

IntelliJ在上面的代码中给出了这个警告:

  

本地变量'amount'是多余的

为什么?

5 个答案:

答案 0 :(得分:10)

在方法体末端(在{和}之间)声明的任何变量都将在该方法结束时被删除(垃圾收集)。 (除非您将其设置为未在方法体中创建的内容)

您在运行时创建变量“amount”:

 double amount;

此时您已创建变量,但从未为其分配过值。 第一次使用此变量位于return语句中:

return (amount = reader.nextDouble());

您应该做的是将变量分配到与声明相同的行:

public static double getAmount(){
    Scanner reader = new Scanner(System.in);
    System.out.println("random text");
    double amount  = reader.nextDouble();
    return amount;
}

或者,更好的是,根本不要使用变量(虽然它可以提高代码的可读性,在这种情况下可以保留一个有效点):

public static double getAmount(){
        Scanner reader = new Scanner(System.in);
        System.out.println("random text");

        return reader.nextDouble();
    }

为什么Intellij警告我?
Intellij只是告诉你最后你的变量没有被使用(它不是)所以删除变量声明是安全的。

但是,如果你将鼠标悬停在你的代码行开头出现的小灯泡上,那么Intellij也应该为你提供一个解决方案。 一个例子: enter image description here

答案 1 :(得分:1)

它告诉您,您只需返回reader.nextDouble(),并且您不需要为此目的使用变量amount

答案 2 :(得分:1)

因为你没有做任何事情。代码可以简化为:

public static double getAmount(){
    Scanner reader = new Scanner(System.in);
    System.out.println("random text");
    return reader.nextDouble();
}

答案 3 :(得分:0)

你可以做到

 return reader.nextDouble();

变量声明和赋值占用了内存。

答案 4 :(得分:0)

尝试关闭冗余局部变量的检测模式。或者你可以简单地做:

return reader.nextDouble();