在学习Java Reference时,无意中浏览到一篇博客,看到了下面代码。
请问下面代码输出什么?为什么?
此段代码很细节,遂记录。
1 import java.lang.ref.WeakReference; 2 import java.util.WeakHashMap; 3 4 /** 5 * 很不错的一个示例 6 * 考察对象的内存分配,常量池,字符串对象的创建细节 7 * 弱引用,异常的处理逻辑 8 */ 9 public class WeakDemo { 10 public static void main(String[] args) { 11 System.out.println(get()); 12 13 } 14 15 public static String get(){ 16 // 使用下面 两种字符串创建的方式,得出的结果相同吗 17 //String a = new String("a"); // 1 18 String a = "a"; // 2 19 WeakReference<String> b = new WeakReference<>(a); 20 WeakHashMap<String, Integer> weakHashMap = new WeakHashMap<>(); 21 weakHashMap.put(b.get(), 1); 22 a = null; 23 System.gc(); 24 String c = ""; 25 try{ 26 c = b.get().replace("a", "b"); 27 return c; 28 }catch (Exception e){ 29 c = "c"; 30 return c; 31 }finally { 32 c += "d"; 33 return c + "e"; 34 } 35 } 36 }
知识点1: 字符串对象的初始化
知识点2: 异常的处理逻辑
知识点3: 弱引用