Java 为什么有时不需要使用方法的返回值?

Java 为什么有时不需要使用方法的返回值?,java,Java,我偶然发现了这个问题,似乎找不到满意的答案。考虑下面的行,在java中: ListBox.getValue(ListBox.getSelectedIndex()) getValue()方法返回一个字符串,但我还没有将其编写为 String foo=ListBox.getValue(ListBox.getSelectedIndex()) 保存返回值的位置 为什么在第一种情况下编写语句不会导致警告,甚至错误?返回值“丢失”,因为它没有被分配给任何变量 有时,您只是调用函数以获取其副作用,而对返回值不

我偶然发现了这个问题,似乎找不到满意的答案。考虑下面的行,在java中:

ListBox.getValue(ListBox.getSelectedIndex())

getValue()
方法返回一个字符串,但我还没有将其编写为

String foo=ListBox.getValue(ListBox.getSelectedIndex())

保存返回值的位置

为什么在第一种情况下编写语句不会导致警告,甚至错误?

返回值“丢失”,因为它没有被分配给任何变量

有时,您只是调用函数以获取其副作用,而对返回值不感兴趣,因此没有任何警告。

返回值“丢失”,因为它没有分配给任何变量


有时,您只调用函数的副作用,而对返回值不感兴趣,因此不会发出警告。

检查特定代码:

ListBox.getValue(ListBox.getSelectedIndex())

我不熟悉JavaGUI,但可以想象ListBox可能没有选定的索引,在这种情况下,它将返回一个sentinel值,如-1。如果调用ListBox.getValue(-1),会发生什么?胡乱猜测:它可能引发异常。因此,也许这段代码实际上是在说“如果列表框中没有进行选择,那么会出现异常(我想在其他地方捕获它)”。

检查特定代码:

ListBox.getValue(ListBox.getSelectedIndex())

我不熟悉JavaGUI,但可以想象ListBox可能没有选定的索引,在这种情况下,它将返回一个sentinel值,如-1。如果调用ListBox.getValue(-1),会发生什么?胡乱猜测:它可能引发异常。因此,也许这段代码实际上是在说“如果列表框中没有进行选择,那么会出现异常(我想在其他地方捕捉它)”。

函数可能有返回值和副作用。一些纯粹主义者不喜欢这样,但事实就是这样

如果您只对副作用感兴趣,而对返回值不感兴趣,则不需要将返回值存储在任何位置。(副作用是指函数调用导致状态改变)


在像Java这样的被垃圾收集的语言中,返回的字符串将立即被垃圾收集,尽管它不会确定何时实际发生清理。在C++中,如果将对象返回为“临时”(类似于STD::string),则调用后立即删除对象(尽管可以将其绑定到一个保留引用的引用,但当引用增加对象的生命周期时,这是一个罕见的例外)。函数可能有返回值和副作用。一些纯粹主义者不喜欢这样,但事实就是这样

如果您只对副作用感兴趣,而对返回值不感兴趣,则不需要将返回值存储在任何位置。(副作用是指函数调用导致状态改变)


在像Java这样的被垃圾收集的语言中,返回的字符串将立即被垃圾收集,尽管它不会确定何时实际发生清理。在C++中,如果将对象返回为“临时”(类似于STD::string),则调用之后立即删除对象(尽管可以将其绑定到一个保留引用的引用,这是当引用可以增加对象的生命周期时的罕见例外)。这就是为什么函数式语言背后的大惊小怪。哦,这就是为什么函数式语言背后的大惊小怪。