为什么没有必要将方法的返回值赋给变量?

时间:2012-05-28 10:06:48

标签: java return-value

  

可能重复:
  what happens to an object in Java if you do not reference it, like here : myString.concat(“that”)

public class ReturnTest
{
    public static void main(String[] args)
    {
        ReturnTest rt = new ReturnTest();
        rt.show();
    }

    public String show()
    {
        return "Hello";
    }
}

在上面的代码中,show()方法返回String值,该值不会被任何变量捕获。编译器和JVM都不会引发任何警告,错误或异常。原始返回类型也是如此。为什么呢?

编译器不应该确保方法返回的重要值没有丢失吗?

我如何从shell中解决这个问题?

4 个答案:

答案 0 :(得分:10)

这是该语言的设计。

在许多情况下,方法会返回您不关心的值。例如,StringBuilder.append()返回对象本身。

确实,在某些情况下,重要的返回值可能会丢失。例如,InputStream.skip(long n)返回跳过的字节数。并且read返回读取的字节数。有一些工具(CheckstyleFindBugs)可以检测到此类错误。但语言本身并不要求检查返回值。即使这样,程序也可以选择忽略该值。

答案 1 :(得分:4)

因为您不一定需要返回的值。

答案 2 :(得分:3)

如果始终使用其返回值,则可以使用@CheckReturnValue注释方法。像FindBugs这样的静态代码分析会考虑这个注释,并在违反时引发警告。

当方法返回某种需要在调用者负责的末尾进行最终处理的对象时,至少这是非常合理的。对于必须在最后关闭的资源,情况确实如此。必须在最后释放的锁......

答案 3 :(得分:1)

在java函数中不是纯函数,因此它们可能仅针对副作用运行。只是在这种情况下没有副作用......考虑

public String show() {
    System.out.println("Hello");
    return "Hello";
}

现在你想要一个警告吗?编译器无法知道您是否为副作用或值运行它,所以为什么坚持?