【问题标题】:Particularities of strings vs other objects字符串与其他对象的特殊性
【发布时间】:2015-11-02 23:48:23
【问题描述】:

我很早就开始接触 Java,我想知道:字符串实际上是对象,但我听说在为它们分配一个值并检索它时,它们的行为完全不同,几乎就像它们是原始类型一样...... . 有人可以说得更清楚吗? 与其他对象相比,当我声明/编辑/访问字符串时,我究竟需要关心什么?

【问题讨论】:

  • 您不能编辑字符串。它们是不可变的。检查String is immutable. What exactly is the meaning?
  • 这是我唯一确定的事情......但是,例如,为什么您可以通过以下方式直接为 String 赋值: String s = "hello";而不是像 String.content = "hello"
  • @JohnStrife 根据您刚才的评论,我猜您可能在 Python 方面有相当多的经验。 java中的字符串不是我认为您正在成像的那种对象。或者至少你不会以那种方式与它互动
  • 是的,我使用过 Python,但我只是不完全了解 Java 字符串如何介于对象和原始类型之间。

标签: java string object


【解决方案1】:

首先Java有字符串literals。这意味着你可以写String foo = "bar";。 字符串是不可变的(一旦创建,就无法更改),它可以帮助 JVM 执行一种称为“字符串池”的技巧。字符串字面量存储在池中,在以下示例中,foobar 都可能指向一个字符串实例。 String foo = "baz"; String bar = "baz"。您甚至可以将它们与== 进行比较,但您永远不应该这样做。但是,equals() 方法(用于比较 Java 中的字符串)可能会从中受益,因为如果两个 var 都指向同一个字符串,它就不需要比较字符串。

请查看此主题以获取更多信息What is the Java string pool and how is "s" different from new String("s")?

【讨论】:

  • 我一定会阅读该主题的,谢谢。但是“字符串文字”到底是什么意思呢?
  • @JohnStrife 您在代码中用双引号写的任何内容,例如"string literals".
  • 好的,这很清楚,在@user996142 链接的帖子中没有澄清一件事:说 String x = "bird"; 有什么区别吗?和字符串 x = new String("bird"); ?
  • 我明白了:with String x = "bird";如果已经有一个包含“bird”的字符串,则池系统会将 x 链接到该字符串。与:字符串 x = 新字符串(“鸟”);无论包含“bird”的字符串是否已经存在,它都会创建一个新的。我希望这会对有我同样问题的人有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2016-01-04
  • 2015-11-06
相关资源
最近更新 更多