当前位置: 首页 > 知识库问答 >
问题:

当使用字符串文字[重复]创建字符串对象时,调用哪个字符串类构造函数

秦博达
2023-03-14

当我们使用 String 文字创建字符串对象时,会调用字符串类的哪个构造函数。

示例:

String str = "hello";

在这种情况下,string类的哪个构造函数get?

共有3个答案

吕利
2023-03-14

Java字符串包含一个不可变的Unicode字符序列。与C/C中string只是一个char数组不同,Java String是java.lang类的对象。不同于普通的课堂:

String以双引号文本的形式与字符串文字相关联,例如“Hello, world!”。您可以将字符串文字直接分配给String变量,而不是调用构造函数来创建String实例。

String s1 = "Hello";              // String literal
String s2 = "Hello";              // String literal
String s3 = s1;                   // same reference
String s4 = new String("Hello");  // String object
String s5 = new String("Hello");  // String object

如何使用“ ”初始化字符串?

夹谷成仁
2023-03-14

根据JVM 5.1规范

为了派生字符串文本,Java 虚拟机检查由CONSTANT_String_info结构给出的代码点序列。

> < li>

如果先前在包含与CONSTANT_String_info结构给出的Unicode码位序列相同的类String的实例上调用了方法String.intern,则字符串文字派生的结果是对类String的同一实例的引用。

否则,将创建一个类 String 的新实例,其中包含由 CONSTANT_String_info 结构给出的 Unicode 代码点序列;对该类实例的引用是字符串文本派生的结果。最后,调用新 String 实例的 intern 方法。

因此从这一点我们可以推断构造函数可以是:

String(int[]码点,int偏移量,int计数)

分配一个新字符串,该字符串包含Unicode码位数组参数的子数组中的字符。offset参数是子数组的第一个代码点的索引,count参数指定子数组的长度。子数组的内容被转换成字符;对int数组的后续修改不会影响新创建的字符串。

或者甚至可以是私有构造函数:

// Package private constructor which shares value array for speed.
String(int offset, int count, char value[]) {
this.value = value;
this.offset = offset;
this.count = count;
}
柯英奕
2023-03-14

当JVM加载一个包含字符串文字的类时

String str = "hello";

它从UTF 8编码的类文件中读取字符串,并从中创建一个字符数组

char[] a = {'h', 'e', 'l', 'l', 'o'};

然后它使用 String(char[]) 构造函数从这个 char 数组创建一个字符串对象

new String(a)

然后JVM将String对象放在String池中,并将对该String对象的引用分配给str变量

 类似资料:
  • 问题内容: 这是以前有关Java中的String初始化的一些问题的后续问题。 在用Java进行了一些小测试之后,我面临以下问题: 为什么我可以执行此语句 当str2一个String对象初始化为,但我不能调用方法toString()上str2?那么Java如何将空字符串对象和字符串文字串联起来? 顺便说一句,我还尝试将一个初始化为null和字符串文字的Integer连接起来,”a_literal_s

  • 我试图创建一个表示JSON对象数组的字符串文字,所以我想到了使用字符串插值特性,如下面的代码所示: 现在我想使用逐字字符串,这样我就不必使用反斜杠来转义双引号。因此,通过这个答案,我了解到逐字字符串和字符串插值可以一起使用。所以我改变了我的代码如下: 但它无法编译。如果我的用法有任何错误,或者在这种情况下无法使用C#的逐字字符串功能转义双引号,有人能帮我吗?

  • 问题内容: 问题:有没有办法使用字符串在python中 创建函数对象 ? 信息:我正在一个项目中,该项目将数据存储在sqlite3服务器后端中。没什么可疯狂的。DAL类通常是通过代码生成来完成的,因为代码是如此平凡。但这给了我一个主意。在python中找不到属性时,如果定义函数,它将在错误之前调用该函数。因此,我通过解析器和逻辑树来计算它的方式可以动态生成第一次调用时所需的代码,然后将函数对象另存

  • 我试图获取任意长度的字符串[],并将其打印成字符串,最好使用字段分隔符。现在我有: 但是由于某种原因,它只是返回“第二个”值。我如何使它正确连接这些值? 另外,我可以使用来简化代码吗?谢谢

  • 我用字符串变量在java中创建了一个for循环。我想向变量添加一个字符,直到该变量等于一组字符。我创建了for循环。控制台中没有显示错误。但是也没有输出”(我哪里错了?

  • 问题 你想重复一个字符串。 解决方案 创建一个包含 n+1 个空元素的数组,然后用要重复的字符串作为连接字符将数组元素拼接到一起: # 创建包含10个foo的字符串 Array(11).join 'foo' # => "foofoofoofoofoofoofoofoofoofoo" 为字符串重复方法 你也可以在字符串的原型中为其创建方法。它十分简单: # 为所有的字符串添加重复方法,这会重复返回