是否有必要存储java中重新调整值的方法中的值?

是否有必要存储java中重新调整值的方法中的值?,java,Java,假设我有一个方法 public int dummy(){ return 1; } 如果我用 dummy(); 不是 这会有什么不同吗?为什么?它仍然会编译,但是(假设只单独调用该方法)它将毫无意义,因为您永远无法使用返回的值。(在更深层次上,根据实现情况,JVM可能会完全优化方法调用。) 但是,如果您执行int a=dummy(),然后您可以稍后引用该变量,例如,System.out.println(a)将打印其值 如果您的方法除了返回值之外还有其他副作用,例如: public int

假设我有一个方法

public int dummy(){
  return 1;
}
如果我用

dummy();
不是


这会有什么不同吗?为什么?

它仍然会编译,但是(假设只单独调用该方法)它将毫无意义,因为您永远无法使用返回的值。(在更深层次上,根据实现情况,JVM可能会完全优化方法调用。)

但是,如果您执行
int a=dummy()
,然后您可以稍后引用该变量,例如,
System.out.println(a)将打印其值

如果您的方法除了返回值之外还有其他副作用,例如:

public int dummy(){
    System.out.println("hello");
    return 1;
}

…然后调用它而不将其结果分配给变量并不是毫无意义的,因为副作用仍然会发生(在本例中打印“hello”)。虽然有人认为这是糟糕的设计,但在Java库中有时会出现这种情况-例如,可以对
文件
对象调用
createnewFile()
,忽略其返回的布尔值(这将告诉您文件是否已创建)。

这两个语句都是正确的,但区别在于,当你使用

dummy()
int a = dummy()
这将调用程序中的函数,但由于您返回一个值,因此没有意义(考虑到您将保留该值)

当你使用

dummy()
int a = dummy()

您将创建一个名为a的整数来存储函数的输出(返回值),您可以随时重用它。

不,这没有任何区别。我们从JDK调用大量方法,忽略它们的输出-List的
.remove(int index)
在给定索引处删除元素,并返回删除的元素。忽略它并继续前进是正常的。

“这会有什么不同吗?”-是。--“为什么?”-如果未存储返回值,则调用端不会分配堆栈内存。如果不希望该方法返回值,则调用
dummy()
,其目的是什么?结果不会有任何差异。通常的做法是忽略从函数返回的值,如
List.remove
Map.put
等。“是否需要存储…”如果不需要,则不需要存储itI我认为JIT几乎肯定会优化掉这样的调用。但是,如果代码仍在被解释,那么可能不会,因此该语句更像是“JVM可能会优化掉这个调用”,而不是JIT(这几乎是肯定的)。