首页 >Java >java教程 >为什么'CaseInsensitiveString cis = new CaseInsensitiveString('Polish')”可以接受,而'String s = new String('silly')”则不鼓励内存优化

为什么'CaseInsensitiveString cis = new CaseInsensitiveString('Polish')”可以接受,而'String s = new String('silly')”则不鼓励内存优化

DDD
DDD原创
2024-11-14 14:09:02383浏览

Why is

Java 字符串内存优化:理解“String s = new String("silly")”

有人对以下建议提出了担忧避免编写像“String s = new String("silly")”这样的 Java 代码。虽然此建议对于优化 String 对象的内存使用有效,但可能不适用于其他类。

为什么“CaseInsensitiveString cis = new CaseInsensitiveString("Polish")”可以接受?

对象“cis”是 CaseInsensitiveString 类的实例。与 String 不同,CaseInsensitiveString 是一个用户定义的类,需要构造函数来创建对象。因此,需要使用语法“CaseInsensitiveString cis = new CaseInsensitiveString("Polish")”来用指定的字符串值初始化对象。

如何使 CaseInsensitiveString 的行为像 String 一样进行文字初始化?

要像 String 一样启用 CaseInsensitiveString 的文字初始化,可以实现以下:

  • 创建自定义工厂方法: 在 CaseInsensitiveString 类中定义一个静态方法,该方法采用文字作为参数并返回使用该值初始化的类的实例。此方法将模仿字符串文字发生的隐式构造函数调用。
  • 实现 valueOf() 方法: 重写从 Object 继承的 valueOf() 方法,该方法由 Java 内部使用从文字创建新的 String 实例。通过提供自定义实现,可以直接从文字创建新的 CaseInsensitiveString 对象。

为什么可以直接将文字传递给 String?

String是Java中的一个特殊类。它有一个预定义的内部字符串池,其中重复的字符串文字存储为对同一对象的引用。这消除了对同一字符串值使用多个 String 对象的需要,从而减少了内存消耗。

以上是为什么'CaseInsensitiveString cis = new CaseInsensitiveString('Polish')”可以接受,而'String s = new String('silly')”则不鼓励内存优化的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn