【问题标题】:String class in specific languages特定语言的字符串类
【发布时间】:2010-09-13 18:20:08
【问题描述】:

我对 API 越来越感兴趣,并打算开始编写自己的 API,但后来我开始考虑 Java 的标准库。

Java 的标准库有一个包含大量方法的 String 类,这不是糟糕的设计吗?我的意思是,如果我要创建 String 类的一个新实例,它会创建一个包含许多方法(toUpper、toLower 等)的对象;这么简单的字符串不会占用太多内存吗?

谢谢,

威廉·范·多恩

【问题讨论】:

  • 不需要包括结束语(“谢谢”+签名)

标签: java string api memory object


【解决方案1】:

不 - 您只需为方法“付费”一次,而不是每个实例一次。毕竟,String 的每个不同实例的代码都不会改变,那么为什么要为每个实例创建一个新的副本呢?

(在某些基于原型的语言中,我怀疑可能会对具有大量方法的对象进行处罚,具体取决于它们的分配方式......但您必须询问非常具体的情况.)

虽然 Java 中的 String 类确实有很多方法,但在许多平台上都会出现同样的情况——因为有很多方法可以使用字符串。

【讨论】:

  • 即使是基于原型的语言通常也没有相同方法的多个副本。对象通常共享其父对象的方法。
  • @Chuck:大概这取决于方法是继承还是单独分配。这种考虑正是我说你必须谈论具体情况的原因:)
  • 谢谢,非常优雅和完整的答案。标记为已接受。
【解决方案2】:

方法不占用每个对象的内存。您可以将a.myMethod() 视为myMethod(a) 的语法糖。 (当然,幕后还有更多事情要做,但这可能会帮助您理解为什么一大堆方法并不意味着创建对象需要大量内存。)

【讨论】:

    【解决方案3】:

    方法不会增加对象的内存空间。

    直到他们被调用。然后会为新的堆栈帧占用一些内存,并在方法执行完毕后释放回来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      相关资源
      最近更新 更多