【问题标题】:Technique used in java to make string immutable?java中用于使字符串不可变的技术?
【发布时间】:2013-08-17 15:09:30
【问题描述】:

java 中使用的使字符串不可变的技术?
或者我怎样才能使我的字符串类不可变。
我只是想知道这背后的逻辑。

【问题讨论】:

  • 字符串已经是不可变的。
  • JDK 在src.zip 文件中提供了Java 标准类的源代码。看一下 String 类代码,您将了解它是如何完成的。也看看how-to-create-immutable-objects-in-java
  • @Pshemo In src.zip 包含所有公开可用的源文件。但对于初学者来说很难理解。 :(
  • @PawanMishra 没有人说这很容易:/这就是为什么我给你第二个链接,这样你就可以看到要寻找的东西。为了使查看更容易,您可以在 Eclipse 或 NetBeans 等 IDE 中使用此文件,然后按 method() 和 Ctrl 键导航到方法声明/实现。
  • 注意:字符串实际上是不可变的,但从技术上讲,它在 Java 7 中有两个可变字段。它们用于缓存 hashCode。

标签: java string immutability


【解决方案1】:

在 Java 中,String 对象已经是不可变的。

我无法谈论 Java 语言创建者是如何具体使 String 不可变的,但这里有一些 guidelines,您可以按照它们来使自己的类不可变:

  1. 不要使用 setter 方法。
  2. 将所有字段设为privatefinal
  3. 不允许覆盖方法(创建类final 或使用工厂模式)。
  4. 如果任何字段是可变类型的对象,使用这些对象时要小心:当从 getter 方法返回这些对象或在构造函数中接收它们时,防御性地克隆它们,并且不要提供修改可变对象的方法。

【讨论】:

  • +1 for either make class final or use a factory pattern - 大多数时候只听说过final 一个,但这个factory pattern 似乎也很有希望:)
【解决方案2】:

Java 中的String 类已经是不可变的。

有关参考,请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/String.html 的文档

如果想了解Java String类是如何实现的,请访问http://docjar.com/html/api/java/lang/String.java.html

【讨论】:

    猜你喜欢
    • 2011-04-04
    • 2013-08-15
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多