我终于搞清楚了和String有关的那点事儿。
String,是Java中除了基本数据类型以外,最为重要的一个类型了。很多人会认为他比较简单。但是和String有关的面试题有很多,下面我随便找两道面试题,看看你能不能都答对: Q1: String s = new String("hollis"); 定义了几个对象。 Q2:如何理解 String 的 intern 方法 上面这两个是面试题和String相关的比较常考的,很多人一般都知道答案。 A1:若常量池中已经存在”hollis”,则直接引用,也就是此时只会创建一个对象,如果常量池中不存在”hollis”,则先创建后引用,也就是有两个。 A2:当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用; 两个答案看上去没有任何问题,但是,仔细想想好像哪里不对呀。按照上面的两个面试题的回答,就是说 new String 也会检查常量池,如果有的话就直接引用,如果不存在就要在常量池创建一个,那么还要intern干啥?难道以下代码是没有意义的吗? String s = new String ( "Hollis" ).intern(); 如果,每当我们使用new创建字符串的时候,都会到字符串池检查,然后返回