【问题标题】:Understanding in creation of String literals in Java [duplicate]理解在 Java 中创建字符串文字 [重复]
【发布时间】:2016-04-21 07:36:35
【问题描述】:

我是 stackoverflow 的新手,我发现它非常有用,非常感谢一个伟大的社区。虽然我一直在了解 Java 中的字符串,但我只是想知道字符串字面量源是如何创建的?我理解了java中字符串的大部分概念。它是一种特殊的类,是最终的,我也理解在创建字符串字面量时,将在堆上创建一个对象,其引用将在字符串常量池中。通过使用它。

String name = "Manchester";

我还了解到,当使用 new 运算符创建字符串时,引用将具有堆上的对象和字符串常量池中的引用。就这样吧。

String name = new String("United");

虽然我确实了解了如何使用 new 运算符在堆上创建对象,但我不明白的是当我们使用双引号“”时如何在堆上创建对象。这是如何实现的?我也去想了 String.class 的源代码,但对我没有任何帮助。

谁能告诉我这是如何工作的?谢谢。

【问题讨论】:

  • 您无需担心。编译器会处理它。
  • 它是最接近java中运算符重载的东西,我认为它在编译时已更改为新字符串
  • @Bálint 不会,否则所有具有相同值的文字将是不同的实例。
  • @Kayaman 感谢您的回复。所以假设我正在创建一个新类,并且我想要类似 String 的功能,因为编译器处理了我无能为力的文字?我想说的是这个<MyClass> className = "Manchester United";
  • This answer 关于这个问题是 Kayaman 所说的,有更多解释。

标签: java string


【解决方案1】:
String name = "Manchester";

将在字符串的常量池(在堆中)中搜索相同的值对象,如果找到将使用该对象,否则将执行此操作:

String name = new String("Manchester");

请注意,String 是不可变的,因此它会尝试使用已经存在的对象而不是创建对象。

可以这样查看:

String x = "a";
String y = "a";

x==y //true

String x = new String("a");
String y = new String("a");

x==y //false

【讨论】:

  • 感谢您的回答。我知道这一点,但想确切地知道文字是如何创建的。从 MarkRotteveel 和 Kayaman 那里得到了答案。
猜你喜欢
  • 2011-02-26
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
相关资源
最近更新 更多