1

问: 我有一个方法可以用 BufferedReader 实例化一个新的 Scanner 类,并返回 Scanner 类本身。据我了解,Java 将返回 Scanner 类 - 作为对象的“副本”(按值传递),而不是我们在 C++ 中调用的引用或指针。如果逻辑是正确的——这是否意味着,在我调用的方法中实例化的 Scanner 将继续保持打开状态,因此永远不会被垃圾收集?

例如:(裸骨)

private Scanner getDataFromWebService(String url)
{
    URLConnection sc = null;
    URL test = null;
    Scanner scanner = null;

    test = new URL(url);
    sc = test.openConnection();
    in = new BufferedReader(new InputStreamReader(sc.getInputStream());

    scanner = new Scanner(in);

    return scanner;
}

// Sample Call

Scanner newScanner = getDataFromWebService(url);

其次,如果您愿意提供帮助;然后 URLConnection 和 BufferedReader 会发生什么,因为如果我在 getDataFromWebService 方法中返回 Scanner 之前关闭它们 - 它将“取消”返回的 Scanner。也许这个问题的答案在于第一个问题。

这里的最佳实践是什么,永远不要返回一个复杂的对象......

4

1 回答 1

4

你会得到一份参考资料。因此,您仍将使用相同的对象实例。

于 2012-10-17T06:46:36.250 回答