我的一位经理曾经第一次遇到这个特性,并称其为该语言的“重大设计缺陷”。我回答说,这种行为有其根本原因,如果你不了解内部原理,这确实非常令人费解和意外。然而,我无法回答(对自己)以下问题:在函数定义而不是在函数执行时绑定默认参数的原因是什么?我怀疑这种经验行为是否有实际用途(谁真的在 C 中使用了静态变量而不会产生错误?)
StringBuffer s = new StringBuffer("Hello World!");
Map<StringBuffer,Integer> counts = new HashMap<StringBuffer,Integer>();
counts.put(s, 5);
s.append("!!!!");
System.out.println( counts.get(s) ); // does this work?