Ruby中的等价:Java中的符号?

时间:2013-10-11 18:52:57

标签: java ruby symbols

noticed the neat features of ruby symbols here

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

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

5 个答案:

答案 0 :(得分:5)

符号实际上是不可变标识符。它们不能改变,不是垃圾收集,并且比Strings具有性能优势。我假设你已经知道String是什么了。所以答案是:Java没有像Symbols这样的东西。

就像@Idan所说的那样(而且非常聪明)枚举可以用作符号,除非它们没有你可以在上调用的方法。 Ruby中的符号是不可变的字符串。

如果您想了解他们的核心差异,请参阅 this post

答案 1 :(得分:2)

“Java有这个功能吗?”的一般答案是什么?问题是“不!”。但是,enums通常可以解决符号解决的相同问题。

答案 2 :(得分:1)

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

在Java中,所有 String对象都是不可变的,并且所有对象都在(创造性命名的)符号表中编入索引以供JVM(只要它们被引用并生效)。

因此,在Java中,String"my_symbol")相当于Ruby符号(:my_symbol)。

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

答案 3 :(得分:0)

与Java中的Ruby符号最接近的是在字符串上调用intern()。 虽然在Java中可以有许多具有相同内容的String对象,但是intern确保对于相同内容(字符序列)返回相同的对象,因此它返回规范/不同的值。 因此,对于泛型Java字符串,您必须调用equals方法来检查内容是否相等,对于内联字符串,您只需使用==运算符即可。

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

答案 4 :(得分:-3)

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