1

注意到这里红宝石符号的简洁特征

java有没有类似的东西?它会叫什么?

D 不要认为最终的字符串会完成所有功能。特别是它的存储方式,它仍然需要一个 toString 进行比较。

4

5 回答 5

5

符号实际上是不可变的标识符。它们不能更改,不会被垃圾回收,并且比字符串具有性能优势。我假设您已经知道 String 是什么。所以答案是:Java 没有符号之类的东西。

就像@Idan 说的(这很聪明)枚举可以用作符号,除非它们没有您可以调用的方法。Ruby 中的符号不​​是不可变的字符串。

如果您想了解它们的核心差异,请参阅这篇文章。

于 2014-03-19T22:02:35.343 回答
2

“Java 有这个特性吗?”的一般回答。问题是“不!”。但是,枚举通常可以解决符号解决的相同问题。

于 2013-10-11T19:05:08.983 回答
1

Ruby 符号是一个不可变的字符串对象,它在符号表中被索引以供单引用重用(因此是非常有创意的命名法!)。

在 Java 中,所有 String对象都是不可变的,并且所有对象都在(发明命名的)符号表中进行索引,以供 JVM 重用(只要它们被引用并处于活动状态)。

因此,在 Java 中,a String( "my_symbol") 等效于 Ruby 符号 ( :my_symbol)。

要获得与 Ruby 'my string'(非不可变)等效的东西,您必须使用更复杂的 Java 类(new StringBuilder("my string")等)。或者,如果您让 Groovy 加载了 JVM,它使用GString覆盖了一个类似的可变概念。

于 2015-04-08T22:41:43.897 回答
0

Java 中最接近 Ruby 符号的方法是调用intern()字符串。在 Java 中,您可以拥有许多具有相同内容的 String 对象,intern确保它为相同的内容(字符序列)返回相同的对象,因此它返回一个规范/不同的值。因此,对于通用 Java 字符串,您必须调用该equals方法来检查内容是否相等,而对于实习字符串,您可以简单地使用==运算符。

有关详细信息,请参阅:https ://en.wikipedia.org/wiki/String_interning

于 2020-07-13T17:39:40.343 回答
-4

ruby 中的符号只是一个不可变的字符串。java 等价物只是一个普通的String. 我真的没有看到太多 ruby​​ 特定的功能,除了这个内存泄漏......

于 2013-10-13T12:26:12.400 回答