阿里面试问到这样一道题,
String s1 = new String("abc") ; String s2 = new String("abc");
面试官说道平常面试问s1==s2 的结果都会说false对吧,那你知道他为什么不相等吗?
按正常思路,就是 == 不仅比较的是内容还有对象的内存地址,abc在常量池中存在一份,但是两个对象的内存地址是不一样的,所以返回false;
面试官继续发问,那如果我想让两个对象 == 为true,应该怎么办???
这个确实没想到,因为内存地址都不一样,==怎么会为true,但还是硬着头皮说了,此处就不列出回答的啥了(反正是答非所问,不混淆各位了),事后还一度怀疑这是不是故意刨了个坑,我入坑了吗?两个对象 == 为true?内存地址都不一样,除非重写==,但是重写了== ,==还是==吗??
事隔几天后和别人交流到这个问题,给了个思路 字符串的intern()方法
了解了一下,这个虽然也不是两个对象 ==比较是否为true。但是可以一个设置字符串,一个为对象,对象调用intern()方法,让两者==为true。突然明白,可能面试官考察的是同一个字符串反复出现,如何节省内存空间的问题。我一直纠结在了 两个new对象 == 为true上......
下面贴上原文,很浅显易懂啦,只是知识储备量还不到这里,备注一下,有助温故知新
补充:书本内容摘自:《Java程序性能优化 让你的Java程序更快、更稳定 葛一鸣》