Java—为什么可以';返回数组中的值后,是否将其设置为null?

Java—为什么可以';返回数组中的值后,是否将其设置为null?,java,Java,我正在从数组返回一个值,但我想在之后将该值设置为null。问题是我一直在出错。为什么会这样 public Book retrieveBookFromBookshelf (String title) { for (int i = 0; i < this.books.length; i++) { if (this.books[i].getTitle().equals(title)) { return this.books[i]; this.boo

我正在从数组返回一个值,但我想在之后将该值设置为null。问题是我一直在出错。为什么会这样

public Book retrieveBookFromBookshelf (String title)
{
   for (int i = 0; i < this.books.length; i++) {
     if (this.books[i].getTitle().equals(title)) {
        return this.books[i];
        this.books[i] = null;
     }
  }
  return null;
}
PublicBookRetrieveBookfromBookshelf(字符串标题)
{
for(int i=0;i
您试图做的是不可能的。相反,缓存对this.books[i]的引用

if (this.books[i].getTitle().equals(title)) {
       Book book = this.books[i]; // cache the reference
       this.books[i] = null;
       return book;
}

因为在将值设置为null之前,需要从函数返回。一旦执行了return,当前函数中就不会执行任何其他操作,并且控制权会返回给调用者函数。

返回后通常不能运行语句。您需要将该值存储在临时变量中:

Book result = this.books[i];
this.books[i] = null;
return result;
或者,您可以在
try
块中返回,并在
finally
中将其设置为null:

try {
    return this.books[i];
} finally {
    this.books[i] = null;
}

但是我认为这对于您的用例来说有点过分。

一旦您的程序读取并处理
return
语句,它将永远不会到达它下面的行,因为程序的控制权被
return
分配给调用方法。“或者,您可以在
try
块中返回,并将其设置为
null
inside
finally
“-可能出现什么问题?=)@图灵85你在暗示什么?这类代码在未来会带来麻烦。它容易出错,而且很难理解。仅仅因为它是可能的,并不意味着应该使用它=)