首页 > 试题广场 >

说一说你对创建字符串的理解

[问答题]

说一说你对创建字符串的理解

推荐

得分点

​ 字符串的创建方式,字符串的存储位置

参考答案

标准回答

​ 创建字符串有两种方式,一种是使用字符串直接量,另一种是使用new关键字。

​ 当使用字符串直接量的方式来创建字符串时,JVM会使用常量池来管理这个字符串。当使用new关键字来创建字符串时,JVM会先使用常量池来管理字符串直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象会被保存在堆内存中。显然,采用new的方式会多创建出一个对象来,占用了更多的内存 ,所以建议采用直接量的方式来创建字符串。

加分回答

​ 使用字符串直接量创建字符串时,JVM会先检查字符串常量池中是否存在该字符串的对象,如果已经存在,那么JVM就会直接返回该字符串在常量池中的内存地址,而不会在字符串常量池中创建了。

​ 使用new关键字创建字符串对象时,JVM会先检查字符串常量池中时候有存在的对应字符串,如果已经存在,则不会在字符串常量池中创建,如果没有存在,那么就会在字符串常量池中创建一个字符串对象,然后还会去堆内存中创建一份字符串对象,把常量池中的对象内容拷贝到内存中的字符串对象,然后返回堆内存中的字符串对象内存地址。

延伸阅读

​ 直接量就是指在程序中通过源代码直接给出值。并不是所有的数据类型都可以指定直接量,能指定直接量的通常只有三种类型:基本类型、字符串类型、null。具体来说,Java8支持以下八种类型的直接量:

  • int直接量:在程序中直接给出的整型数值,可分为十进制、二进制、八进制和十六进制四种,其中二进制要以0B或者0b开头,八进制需要以0开头,十六进制需要以0X或者0x开头。
  • long直接量:在整数值后添加L或者l就变成了long类型的直接量。
  • float直接量:在浮点数后添加F或者f就变成了float类型的直接量。
  • double直接量:直接给出一个标准的小数形式或者科学计数法形式的浮点数就是double类型的直接量。
  • boolean直接量:只有true和false。
  • char直接量:有三种形式,分别是用单引号括起来的字符、转义字符和Unicode值表示的字符。
  • String直接量:一个用双引号括起来的字符序列就是String类型的直接量。
  • null直接量:只有null。
编辑于 2021-09-15 10:26:16 回复(0)
链接:https://www.nowcoder.com/questionTerminal/4ef40afa19e64b07b48ab4da9edb1e99?orderByHotValue=1&page=1
来源:牛客网

标准回答

创建字符串有两种方式,一种是使用字符串直接量,另一种是使用new关键字。

当使用字符串直接量的方式来创建字符串时,JVM会使用常量池来管理这个字符串。当使用new关键字来创建字符串时,JVM会先使用常量池来管理字符串直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象会被保存在堆内存中。显然,采用new的方式会多创建出一个对象来,占用了更多的内存 ,所以建议采用直接量的方式来创建字符串。

加分回答

使用字符串直接量创建字符串时,JVM会先检查字符串常量池中是否存在该字符串的对象,如果已经存在,那么JVM就会直接返回该字符串在常量池中的内存地址,而不会在字符串常量池中创建了。

使用new关键字创建字符串对象时,JVM会先检查字符串常量池中时候有存在的对应字符串,如果已经存在,则不会在字符串常量池中创建,如果没有存在,那么就会在字符串常量池中创建一个字符串对象,然后还会去堆内存中创建一份字符串对象,把常量池中的对象内容拷贝到内存中的字符串对象,然后返回堆内存中的字符串对象内存地址。

延伸阅读

直接量就是指在程序中通过源代码直接给出值。并不是所有的数据类型都可以指定直接量,能指定直接量的通常只有三种类型:基本类型、字符串类型、null。具体来说,Java8支持以下八种类型的直接量:

  • int直接量:在程序中直接给出的整型数值,可分为十进制、二进制、八进制和十六进制四种,其中二进制要以0B或者0b开头,八进制需要以0开头,十六进制需要以0X或者0x开头。
  • long直接量:在整数值后添加L或者l就变成了long类型的直接量。
  • float直接量:在浮点数后添加F或者f就变成了float类型的直接量。
  • double直接量:直接给出一个标准的小数形式或者科学计数法形式的浮点数就是double类型的直接量。
  • boolean直接量:只有true和false。
  • char直接量:有三种形式,分别是用单引号括起来的字符、转义字符和Unicode值表示的字符。
  • String直接量:一个用双引号括起来的字符序列就是String类型的直接量。
  • null直接量:只有null。
发表于 2022-12-23 19:32:46 回复(0)