1、在jdk6中的运行结果
package string; public class StringIntern { public static void main(String[] args) { String s = new String("1"); s.intern(); String s2 = "1"; System.out.println(s == s2);//jdk6: false String s3 = new String("1") + new String("1"); s3.intern(); String s4 = "11"; System.out.println(s3 == s4);//jdk6: false } }
2、在jdk7/jdk8中的运行结果
package string; public class StringIntern { public static void main(String[] args) { String s = new String("1"); s.intern(); String s2 = "1"; System.out.println(s == s2);//jdk7/8: false String s3 = new String("1") + new String("1"); s3.intern(); String s4 = "11"; System.out.println(s3 == s4);//jdk7/8: true } } D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=33581:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\jdk8;D:\develop\maven\repository\junit\junit\4.13.1\junit-4.13.1.jar;D:\develop\maven\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar string.StringIntern false true Process finished with exit code 0
public class StringIntern { public static void main(String[] args) { String s = new String("1"); String intern = s.intern(); String s2 = "1"; System.out.println(s == s2);//false System.out.println(intern == s2);//true } } D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=23941:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Thread com.atguigu.communication.StringIntern false true Process finished with exit code 0
public class StringIntern { public static void main(String[] args) { String s3 = new String("1") + new String("1"); String intern = s3.intern(); String s4 = "11"; System.out.println(s3 == s4);//true System.out.println(intern == s4);//true } } D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=23752:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\Thread com.atguigu.communication.StringIntern true true Process finished with exit code 0
3、面试的拓展问题
package string; public class StringIntern { public static void main(String[] args) { String s3 = new String("1") + new String("1"); String s4 = "11"; s3.intern(); String s5 = s3.intern(); System.out.println(s3 == s4);//false System.out.println(s5 == s4);//true } } D:\Java\jdk-17\bin\java.exe "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=34367:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath F:\IdeaProjects\JavaSenior\out\production\jdk8;D:\develop\maven\repository\junit\junit\4.13.1\junit-4.13.1.jar;D:\develop\maven\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar string.StringIntern false true Process finished with exit code 0
4、intern()的使用:jdk6 vs jdk7/8
- jdk1.6中,将这个字符串对象尝试放入串池。
- 如果串池中有,则并不会放入。返回已有的串池中的对象的地址
- 如果没有,会把此对称复制一份,放入串池,并返回串池中的对象地址
- jdk1.7起,将这个字符对象尝试放入串池。
- 如果串池中有,则并不会放入。返回已有的串池中的对象的地址
- 如果没有,则会把对象的引用地址复制一份,放入串池,并返回串池中的引用地址
关于intern()的面试难题
于 2023-08-21 20:15:42 首次发布