【发布时间】:2021-01-26 22:26:13
【问题描述】:
Java 在 Java 8 中引入了 value based 类,并且只用它标记了少数 Java.Util(可选)和 Java.time 类。
基于值的类的标准定义为here。
这些标准中的大多数(除了在身份敏感操作中使用它们的严格指导以及它们不应该具有可访问的构造函数这一事实)似乎适合原始包装类,如 Integer、Double(以及类似的不可变类,如 String) .我知道从技术上讲,开发人员可能已经将这些类与基于身份的操作一起使用(尽管他们不应该使用),因此现在将它们标记为 value based 可能会导致向后兼容性问题。但除此之外,还有什么其他原因导致在概念上,这些包装类不是基于值的吗?
我倾向于将它们视为基于价值的原因。
当您定义Integer myInt = 5 时,您实际上只对值 5 感兴趣,而不是对持有该值的引用感兴趣(至少对于我能想到的大多数用例)。同样,当您说String myStr = "hello world" 时,您真正感兴趣的是值文字“hello world”,而不是它的引用。
【问题讨论】:
-
在列出的条件中:没有可访问的构造函数。
-
是的,那也是……编辑了问题。我很想知道是否还有其他根本原因?
-
读到这里,我很好奇……什么可以调用基于 Integer 或 String 值的购买?
-
仅供参考:
String不是“包装类”。 -
@Andreas 好吧,从技术上讲,它是一个数组的包装器……