java有没有类似的东西?它会叫什么?
D 不要认为最终的字符串会完成所有功能。特别是它的存储方式,它仍然需要一个 toString 进行比较。
符号实际上是不可变的标识符。它们不能更改,不会被垃圾回收,并且比字符串具有性能优势。我假设您已经知道 String 是什么。所以答案是:Java 没有符号之类的东西。
就像@Idan 说的(这很聪明)枚举可以用作符号,除非它们没有您可以调用的方法。Ruby 中的符号不是不可变的字符串。
如果您想了解它们的核心差异,请参阅这篇文章。
“Java 有这个特性吗?”的一般回答。问题是“不!”。但是,枚举通常可以解决符号解决的相同问题。
Ruby 符号是一个不可变的字符串对象,它在符号表中被索引以供单引用重用(因此是非常有创意的命名法!)。
在 Java 中,所有 String
对象都是不可变的,并且所有对象都在(发明命名的)符号表中进行索引,以供 JVM 重用(只要它们被引用并处于活动状态)。
因此,在 Java 中,a String
( "my_symbol"
) 等效于 Ruby 符号 ( :my_symbol
)。
要获得与 Ruby 'my string'
(非不可变)等效的东西,您必须使用更复杂的 Java 类(new StringBuilder("my string")
等)。或者,如果您让 Groovy 加载了 JVM,它使用GString覆盖了一个类似的可变概念。
Java 中最接近 Ruby 符号的方法是调用intern()
字符串。在 Java 中,您可以拥有许多具有相同内容的 String 对象,intern
确保它为相同的内容(字符序列)返回相同的对象,因此它返回一个规范/不同的值。因此,对于通用 Java 字符串,您必须调用该equals
方法来检查内容是否相等,而对于实习字符串,您可以简单地使用==
运算符。
ruby 中的符号只是一个不可变的字符串。java 等价物只是一个普通的String
. 我真的没有看到太多 ruby 特定的功能,除了这个内存泄漏......