Java 中使用 " " 进行字符串初始化:一种特殊情况
Java 的 String 类,尽管是面向对象的实体,但可以进行初始化使用双引号。这种特性引发了一个问题:在面向对象编程的范围内,这怎么可能?
Java 的独特方法
与 Java 中的一切都必须的观念相反作为一个对象,出于性能原因,该语言的设计者选择保留原始数据类型。与堆分配的对象相比,驻留在调用堆栈中的基元可提供更快的处理速度和更低的内存使用量。
为了平衡这些考虑因素,Java 的 String 被设计为混合体。它的行为类似于基元,但也具有对象的一些特征。
字符串文字池
当使用双引号创建字符串文字时,它会直接分配给字符串文字池。该池存储常用字符串的共享存储库以优化内存使用。对同一字符串文字的后续引用将从该池中提取,避免不必要的重复。
String 对象
相反,当使用“new”实例化 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
如图所示,s1、s2、s3 都指向池中的同一个 String 字面量,而 s4 和s5 是不同的 String 对象。
含义和注意事项
这种独特的行为对于字符串操作具有重要意义。由于文字是不可变且共享的,因此修改一个文字会影响对其的所有引用。然而,String 对象是可变的,允许对特定实例进行修改而不影响其他实例。
考虑这些区别对于 Java 程序中高效且正确的字符串处理至关重要。
以上是Java 字符串虽然是对象,但如何用双引号初始化?的详细内容。更多信息请关注PHP中文网其他相关文章!