认为 new 方式创建了 1 个对象的人认为,new String 只是在堆上创建了一个对象,只有在使用 intern() 时才去常量池中查找并创建字符串。认为 new 方式创建了 2 个对象的人认为,new String 会在堆上创建一个对象,并且在字符串常量池中也创建一个字符串。认为 new 方式有可能创建 1 个或 2 个对象的人认...
答案众说纷纭,有说创建了1个对象,也有说创建了2个对象。答案对,也不对,关键是要学到问题底层的原理。 底层原理分析 在上篇文章《面试题系列第1篇:说说==和equals的区别?你的回答可能是错误的》中我们已经提到,String的两种初始化形式是有本质区别的。 代码语言:javascript 复制 String str1 = "abc"; // 在...
如果 hello 这个字符串常量不存在,则创建两个对象,分别是 hello 这个字符串常量, 以及 new String 这个实例对象。如果 hello 这字符串常量存在,则只会创建一个对象。小伙伴们再来看这样一段代码:ENTER TITLE public static void main(String[] args) { String s1 = "hello";String s2 = "hello";String ...
一个或两个。如果字符串常量池已经有“xyz”,则是一个;否则,两个。 当字符创常量池没有 “xyz”,此时会创建如下两个对象: 一个是字符串字面量 'xyz' 所对应的、驻留(intern)在一个全局共享的字符串常量池中的实例,此时该实例也是在堆中,字符串常量池只放引用。 另一个是通过 new...
在一般情况下,new String("xxx")会创建两个对象:一个在字符串常量池中,一个在堆内存中。 如果字符串常量池中已经存在相同的字符串,则只会创建一个堆内存中的String对象。 特殊情况 在某些特定情况下,如JVM的启动参数、类的加载顺序或字符串拼接优化等,也可能会影响对象的创建数量。但通常情况下,上述两种情况是...
百度试题 结果1 题目String s=new String("a");共创建了几个String对象?相关知识点: 试题来源: 解析 答:两个。其中包括一个字符对象和一个字符对象引用对象。反馈 收藏
会创建 1 或 2 个字符串对象。 主要有两种情况: 1、如果字符串常量池中不存在字符串对象“yupi”的引用,那么它会在堆上创建两个字符串对象,其中一个字符串对象的引用会被保存在字符串常量池中。 示例代码(JDK 1.8): String s = new String("yupi"); 对应的字节码: ldc 命令用于判断字符串常量池中是否保...
("Test"); 定义的"Test"字符,在信息#17 = Utf8 Test可以看出,也就是在编译期 new 方式创建的字符串就会被放入到编译期的字符串常量池中,也就是说 new String 的方式会首先去判断字符串常量池,如果没有就会新建字符串那么就会创建 2 个对象,如果已经存在就只会在堆中创建一个对象指向字符串常量池中的字符...
第一次创建是因为传进的参数“abc”会创建一个对象,相当于String param=“abc”, 第二次创建是因为使用new String() 来创建字符串,此时将第一次创建的对象param=”abc”,作为参数传给String的构造方法。相当于 String str = new String(param). ———详细分析如下——— 分析1:我们...