问题: 我有一个方法,实例化一个新的扫描仪类与BufferedReader,并返回扫描仪类本身。据我了解,Java将返回Scanner类 - 作为对象的“副本”(按值传递),而不是我们在C++中调用的参考或指针。假设逻辑是正确的 - 那么这是否意味着,在我调用的方法中实例化的扫描程序将继续保持打开状态,因此永远不会被垃圾收集?Java扫描仪最佳实践
例如:(裸骨)
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方法中的扫描器之前关闭它们 - 它将使返回的扫描器“无效”。也许这个答案在于第一个问题。
什么是最好的做法在这里,只是从来没有返回一个复杂的对象......
顺便说一句,您不需要该方法的前三行;您可以声明变量并将它们赋值,就像使用'null'做的那样,但是使用对象实例。 – Joey
这个问题本质上是问Java是按值传递还是按引用传递。 – Raedwald