【问题标题】:What was the need for string to be object in java什么需要字符串成为java中的对象
【发布时间】:2018-01-21 06:44:38
【问题描述】:

我知道java中的字符串不是像int或float这样的普通变量,它是对象,但我的问题是为什么有必要这样做?为什么字符串不能像字符序列一样是普通变量?是什么让 Java 设计者将字符串作为对象?

【问题讨论】:

  • 这不是必需的,只是有用的,String 保存有关其状态的信息,并将方法方法很好地组合在一起,例如String.lengthString.containsString.hashCode 等......它也可能是值得注意的是,你可以只使用一个 char 数组,但你会失去很多 String 的实用性。
  • 你可以找到关于String的很好的讨论stackoverflow.com/questions/2009228/…
  • @George 正是我想知道的。我们可以使用 char 数组以传统方式创建字符串,但是我们不会使用预定义的方法来计算长度,在某个位置给出字符等等,对吧?
  • @Allan 它的评论帮助了我!

标签: java string object


【解决方案1】:

我会说 有几个原因与 Java 中的 int/byte/double/... 的包装器确实存在的原因很接近

  • 允许null
  • 将其包含在Collection
  • 作为Object 与其他对象一起使用泛型和多态的强大功能
  • 拥有String类的所有精彩方法来操作字符串对象
  • 让字符串池工作并节省内存(如果字符串在堆栈中而不在堆中,这将很困难)

链接:

【讨论】:

    【解决方案2】:

    String 与其他原始类型(如 int)之间的主要区别在于,它的值需要根据字符串长度而定的可变内存量。这使得将它们保留在堆栈上变得很困难。

    另一方面,我们有字符串连接运算符s1 + s2 和字符串文字"abc",这使得它不同于任何其他对象。

    【讨论】:

    • 是的,但实际上由于字符串是不可变的,因此它们在创建时是固定大小的,因此它们也可以像 char 数组一样保存在堆栈中
    • @Allan 字符串变量不是不可变的,例如s="a"; s="abc" 你会为s 分配多少内存?并且 char 数组也不在堆栈上。
    • 字符串变量不可变的:s 不是对象而是对对象的引用!因此您可以更改它并使其指向一个新的字符串对象abc 但是我同意您的内存分配,因此当您使用 char 数组时在 c++ 中所做的是拥有一个 MAX 固定大小并使用 @987654328 @ 找到你的 char 数组的实际大小,如果你想在堆栈上使用它们,你想要动态分配,那么你显然需要去堆
    • @Allan 字符串 object 是不可变的,String 类型的变量可以更改(如果它包含对 String 对象的引用或假设是原始字符串值)。但我认为我们的意思是一样的。
    • 是的,不是字符串变量,而是字符串对象! :-) 无论如何,祝你有个愉快的星期天:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多