【问题标题】:Change final String value in Java [duplicate]更改Java中的最终字符串值[重复]
【发布时间】:2015-02-23 02:22:29
【问题描述】:

如果您构建一个对象,例如“Intruder”并将其定义为 final,您仍然可以更改该类定义中非 final 的对象字段(即 Intruder.power = 50;)。 在这种情况下,限制将是关于入侵者的对象引用,而不是内部值。

我的问题是:以字符串为例呢? 如果你创建一个 String 对象,比如 "String s = new String("str"); 有没有办法改变字符串的“str”值? 如果不是,那是为什么呢?难道不改变它的引用就可以改变那个String对象的字面值吗?

谢谢!

【问题讨论】:

  • 没有。原因其实非常简单:String 没有任何公共字段,也没有任何方法可以让您更改字符串。 (一种奇特的说法是说它是不可变的
  • 这是因为没有公共方法可以让你改变它的私有属性。

标签: java string reference


【解决方案1】:

正如其他答案所述,字符串是不可变的。如果您希望能够更改有关字符串的内容,StringBuilderStringBuffer 更适合您。

【讨论】:

    【解决方案2】:

    不,因为字符串是不可变的。当您在字符串上使用方法时,它会创建一个新的字符串对象。

    【讨论】:

    • 您的回答令人困惑。如果字符串是不可变的,则不能更改它。
    • 他的回答是正确的,因为你从来没有真正改变过字符串。当您为 String 对象分配新值时,您将用新值替换它,而不是修改以前的 String。
    【解决方案3】:

    这是不可能的。字符串是不可变的,这意味着它们不能更改。如果我这样做:

    String name = "John"
    name.substring(2);
    

    什么都不会发生。将返回一个永远不会分配给任何东西的新字符串。

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      相关资源
      最近更新 更多