В настоящее время я работаю над оптимизацией кода, где я использую try.. наконец, блокирует уважение к моим объектам.
Но у меня есть путаница в том, что управление возвращаемым объектом управляется, когда я создаю нулевую ссылку на объект в моем блоке finally.??
При возвращении объекта в блок try, будет ли он создавать предварительно скомпилированный оператор во время компиляции? или создать новую ссылку в куче, когда дело касается возврата? или просто вернуть текущую ссылку объекта?
Ниже приведен мой исследовательский код.
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());
}
}
Выход:
Внутри Try Block
Хэш-код str: -832992604
в конце концов в окончательном блоке после
Сообщение: Hello world
Хэш-код сообщения: -832992604
Я очень удивлен, когда вижу, что возвращающий объект и вызывающий объект имеют один и тот же хэш-код. Поэтому я смущен ссылкой на ссылку на объект.
Пожалуйста, помогите мне очистить это фундаментальное.