java - String s ="sometext"是如何工作的?

标签 java string oop

在面向对象的语言中,通过使用new 关键字创建新对象(因为 java 中的内存分配是动态完成的)。

尽管 String 是一个类,但如何在没有 new 关键字的情况下创建其对象?

即使它使用字符串池,我也无法清楚地理解它: “可以创建一个用户定义的类,我们可以在其中像 String 一样直接初始化变量”

最佳答案

使您能够使用字符串文字创建 String 对象的机制内置于编译器和 JVM 中。它不适用于用户定义类型的对象。

当你第一次写作时

String s = "sometext";

编译器发出两件事:

  • A constant pool包含 "sometext" 的条目,以及
  • 设置s 以引用常量表中条目的指令。

如果你写

String t = "sometext";

在同一个类中,编译器将为 "sometext" 重用现有常量,而不是创建一个新常量。

在运行时,JVM 为常量表中的每个条目创建一个新的 String 对象,并让您的程序访问它们。本质上,JVM 代表您的程序调用 new,并将它交给一个随时可用的对象。

当您使用自动装箱创建原始包装器的实例时,类似的系统正在发挥作用。然而,共同点是它需要编译器的支持,并且不适用于用户定义的类型。

关于java - String s ="sometext"是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42003169/

相关文章:

java - arraylist 给出 "cannot be resolved"和 "cannot be resolved to a type"错误(eclipse)

javascript - 如何区分数字串和字符串?

java - 检测字符串中的不完整模式

python - Golang 相当于 Python 的 NotImplementedException

python - 如何缓存依赖于其他类属性的方法返回的值?

java - Android Studio SharedPreferences 和内部存储不起作用

java - MessageDigest.update() 在 digest() 之前?

java - 如何用下划线替换斜线

string - 如何在 Swift 中更改字符串中单个单词的颜色

java - 游戏中的多人游戏。如何明智地设计它?