Java面试宝典-java基础04
31、String s = new String(“dume”);创建了几个字符串对象?
第一次调用时,会在堆内存中创建一个字符串对象,同时在字符串常量池中创建一个对象“dume”;
第二次调用时,只会在堆内存中创建一个字符串对象,指向之前在字符串常量池中创建的对象“dume”。
这个问题的答案取决于字符串常量池中是否已经存在与给定的字符串字面量相同的字符串。如果字符串常量池中已经存在相同的字符串,那么通过new String(“dume”)创建的对象将不会在常量池中创建新的字符串,而只是在堆内存中创建一个新的String对象。这种情况下,只创建了一个对象,即堆内存中的String对象。如果字符串常量池中不存在相同的字符串,那么new String(“dume”)不仅会在堆内存中创建一个新的String对象,还会在字符串常量池中创建一个对应的字符串常量。这种情况下,创建了两个对象:一个是字符串常量池中的字符串常量,另一个是堆内存中的String对象。
简而言之,如果字符串常量池中已有"dume",则只创建一个String对象;如果字符串常量池中没有"dume",则创建两个对象。这个过程涉及到JVM对字符串的处理机制,包括字符串字面量的解析、字符串常量池的检查以及堆内存中对