【Java】new String(“demo“)之后,到底创建了几个对象?

对于这个问题,分以下两种情况:
1) 如果 hello 这个字符串常量不存在,则创建两个对象,分别是hello 这个字符串常量,以及new String 这个实例对象
2)如果 hello 这个字符串常量存在,则只会创建一个对象,即new String这个实例对象。


这个语句里面有一个new关键字,这个关键字是在程序运行时,根据已经加载的系统类 String,在堆内存里面实例化的一个字符串对象,然后,在这个String的构造方法里面,传递了一个hello 字符串,因为String里面的字符串成员变量是 final 修饰的,所以它是一个字符串常量

接下来

JVM 会用字面量hello 去字符串常量池里面试图获取它对应的String对象引用,如果获取不到,就会在堆内存里面创建一个hello的String对象,并且把引用保存到字符串常量池里面。
后续如果再有字面量hello 的定义,因为字符串常量池里面已经存在了字面量hello 的引用,所以只需要从常量池里面获取对应的引用就可以了,不需要再创建

你可能感兴趣的:(Java面试题,java,开发语言,面试)