Javaの参考書で勉強しているんですが、その中のソースで
ちょっと疑問に思ったことがあったので質問させてください。

public class DBAccess {
/* 〜中略〜 */
// DBから書籍情報を取得する
static BookData getBook(String primary_key) {
BookData bk = null;
// 書籍オブジェクトを生成して、書籍情報を格納する
bk = new BookData();
/* 〜中略〜 */

// 生成した書籍オブジェクトを返す
return bk;
}
/* 〜中略〜 */
}

これを他のクラスから
BookData bk = DBAccess.getBook(primary_key);
として呼び出します。

ここで思ったのですが、DBAccess.getBook()の戻り値である
BookDataオブジェクトはDBAccess.getBook()内で宣言されたものです。
ということは、
BookData bk = DBAccess.getBook();で
bkにBookDataオブジェクトのアドレスが渡されているのだとすれば、
C言語流の考えだとBookDataオブジェクトはDBAccess.getBook()内で
宣言されたオブジェクトですから、DBAccess.getBook()を抜けた時点で
解放されてしまう可能性がありますよね。

ここのところどうなってるんでしょうか・・・。ご存じの方お願いします。