深入解析:Java 字符串字面量作为常量或单例

String 是一系列字符的序列,在 Java 编程中被广泛使用。在 Java 编程语言中,字符串是对象。在 Java 中,如果我们在其他字符串变量声明中使用了相同的字符串,虚拟机可能只在内存中创建一个 String 实例。为了帮助大家理解,让我们来看下面的图解:
图解 1:

String string1 = "GeeksForGeeks";
String string2 = "GeeksForGeeks";

在上面的例子中,Java 虚拟机只会在内存中创建一个 "GeeksForGeeks" 实例。这里有两个不同的变量,它们都初始化为 "GeeksForGeeks",但实际上指向内存中同一个 String 实例。下图更准确地描绘了这个例子:-

!image

因此,字符串字面量实际上成为了一个常量或单例。更准确地说,在 Java 中,代表 Java 字符串字面量的对象是从一个由 Java 虚拟机内部维护的常量字符串池中获取的。这意味着,即使是在不同项目中单独编译的类,只要它们被用在同一个应用程序中,就可能共享常量 String 对象。这种共享发生在运行时,因此它不是一个编译时特性。

图解 2: 如果我们想让这两个字符串变量指向独立的 String 对象,我们可以使用 new 操作符,如下所示:

String string1 = new String("GeeksForGeeks");
String string2 = new String("GeeksForGeeks");

上面的代码将在内存中创建两个不同的内存对象来表示它们,即使这两个字符串的值是相同的。下图描绘了 new 操作符的使用:

!image

> 注意: 从上面的图片可以清楚地看出,为两个包含相同字符串值的不同字符串创建了两个不同的内存块。

示例 1:

Java


CODEBLOCK_3c24f7f4

Output

True
False
False

> 在上面的程序中,总共会创建 3 个对象。现在,如果我们想要比较 2 个字符串的内容,我们可以使用 INLINECODE8f244c3c 方法,而 INLINECODE7b5a5f1a 操作符可以用来比较两个字符串的引用是否相同。

示例 2:

Java


CODEBLOCK_f96c596a

Output

true
false

什么是 Java 中的常量?

  • 程序中在执行期间其值不能改变的元素称为常量。
  • 它也被称为字面量。
  • 它可以是 int(整型)、float(浮点型)和 character(字符型)数据类型。

构建整型常量的规则:

  • 它必须至少包含一个数字。
  • 它必须不能有小数点。
  • 它可以是正数或负数。
  • 整型常量中不允许出现逗号或空白。

构建浮点型常量的规则:

  • 它必须至少包含一个数字。
  • 它必须有一个小数点。
  • 它可以是正数或负数。
  • 浮点型常量中不允许出现逗号或空白。

构建字符型常量的规则:

  • 它是单个字母、数字或特殊符号。
  • 字符常量的长度为 1 个字符。
  • 字符常量包含在单引号内(例如 ch
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/21499.html
点赞
0.00 平均评分 (0% 分数) - 0