说一说你对创建字符串的理解
标准回答
创建字符串有两种方式,一种是使用字符串直接量,另一种是使用new关键字。
当使用字符串直接量的方式来创建字符串时,JVM会使用常量池来管理这个字符串。当使用new关键字来创建字符串时,JVM会先使用常量池来管理字符串直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象会被保存在堆内存中。显然,采用new的方式会多创建出一个对象来,占用了更多的内存 ,所以建议采用直接量的方式来创建字符串。
加分回答
使用字符串直接量创建字符串时,JVM会先检查字符串常量池中是否存在该字符串的对象,如果已经存在,那么JVM就会直接返回该字符串在常量池中的内存地址,而不会在字符串常量池中创建了。
使用new关键字创建字符串对象时,JVM会先检查字符串常量池中时候有存在的对应字符串,如果已经存在,则不会在字符串常量池中创建,如果没有存在,那么就会在字符串常量池中创建一个字符串对象,然后还会去堆内存中创建一份字符串对象,把常量池中的对象内容拷贝到内存中的字符串对象,然后返回堆内存中的字符串对象内存地址。
直接量就是指在程序中通过源代码直接给出值。并不是所有的数据类型都可以指定直接量,能指定直接量的通常只有三种类型:基本类型、字符串类型、null。具体来说,Java8支持以下八种类型的直接量:
得分点
字符串的创建方式,字符串的存储位置
参考答案
标准回答
创建字符串有两种方式,一种是使用字符串直接量,另一种是使用new关键字。
当使用字符串直接量的方式来创建字符串时,JVM会使用常量池来管理这个字符串。当使用new关键字来创建字符串时,JVM会先使用常量池来管理字符串直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象会被保存在堆内存中。显然,采用new的方式会多创建出一个对象来,占用了更多的内存 ,所以建议采用直接量的方式来创建字符串。
加分回答
使用字符串直接量创建字符串时,JVM会先检查字符串常量池中是否存在该字符串的对象,如果已经存在,那么JVM就会直接返回该字符串在常量池中的内存地址,而不会在字符串常量池中创建了。
使用new关键字创建字符串对象时,JVM会先检查字符串常量池中时候有存在的对应字符串,如果已经存在,则不会在字符串常量池中创建,如果没有存在,那么就会在字符串常量池中创建一个字符串对象,然后还会去堆内存中创建一份字符串对象,把常量池中的对象内容拷贝到内存中的字符串对象,然后返回堆内存中的字符串对象内存地址。
延伸阅读
直接量就是指在程序中通过源代码直接给出值。并不是所有的数据类型都可以指定直接量,能指定直接量的通常只有三种类型:基本类型、字符串类型、null。具体来说,Java8支持以下八种类型的直接量: