Javaにはこれに似たものがありますか?それは何と呼ばれるでしょうか?
D は、最終的な文字列がすべての機能を実行するとは思わない. 特にその保存方法と、比較のために toString が必要です。
Javaにはこれに似たものがありますか?それは何と呼ばれるでしょうか?
D は、最終的な文字列がすべての機能を実行するとは思わない. 特にその保存方法と、比較のために toString が必要です。
Ruby シンボルは不変の文字列オブジェクトであり、単一参照の再利用のためにシンボル テーブルにインデックスが作成されます (したがって、非常に独創的な命名法です!)。
Java では、すべての String
オブジェクトは不変であり、JVM による再利用のために (それらが参照され、有効である限り)、すべてのオブジェクトが (独自に命名された) シンボル テーブルにインデックス付けされます。
したがって、Java では、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
メソッドを呼び出してコンテンツの等価性をチェックする必要がありますが、インターンされた文字列の場合は単純に==
演算子を使用できます。
詳細については、https: //en.wikipedia.org/wiki/String_interningを参照してください。
ruby のシンボルは単なる不変の文字列です。Java に相当するものは、通常のString
. おそらくこのメモリリークを除いて、そこにはRuby固有の機能があまり多くありません...