gpt4 book ai didi

java - 如何尝试......最终在内部工作

转载 作者:搜寻专家 更新时间:2023-10-30 19:59:18 24 4
gpt4 key购买 nike

目前我正在使用 try..finally block 来优化我的对象。

但我很困惑,当我在 finally block 中创建对对象的空引用时,如何管理返回对象。 ??

在try block 中返回一个对象时,会不会在编译过程中创建一个预编译语句?或者在返回语句时在堆中创建新引用?或者只返回对象的当前引用?

下面是我的研究代码。

public class testingFinally{
public static String getMessage(){
String str = "";
try{
str = "Hello world";
System.out.println("Inside Try Block");
System.out.println("Hash code of str : "+str.hashCode());
return str;
}
finally {
System.out.println("in finally block before");
str = null;
System.out.println("in finally block after");
}
}

public static void main(String a[]){
String message = getMessage();
System.out.println("Message : "+message);
System.out.println("Hash code of message : "+message.hashCode());
}
}

输出是:

Inside Try Block
Hash code of str : -832992604
in finally bolck before
in finally block after
Message : Hello world
Hash code of message : -832992604

当我看到返回对象和调用对象具有相同的哈希码时,我感到非常惊讶。所以我对对象引用感到困惑。

请帮我弄清楚这个基础。

最佳答案

该方法并不完全返回一个对象。它返回对对象的引用。该对象引用是指在方法调用内外保持不变。因为是同一个对象,哈希码将相同。

return strstr 的值是对字符串“Hello World”的引用。返回语句读取 str 的值并将其保存为方法的返回值。

然后运行 ​​finally block ,它有机会通过包含自己的改变返回值返回声明。在 finally block 中更改 str 的值不会更改已设置的值返回值,只有另一个 return 语句会。

因为将 str 设置为 null 没有任何效果,您可以像这样删除语句。一旦方法返回,它就会超出范围,因此它对垃圾收集没有帮助。

关于java - 如何尝试......最终在内部工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27738548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com