15

Java では、明示的に宣言された文字列は JVM によってインターンされます。そのため、同じ文字列の後続の宣言は、2 つの別個の (しかし同一の) 文字列ではなく、同じ文字列インスタンスへの 2 つのポインターになります。

例えば:

public String baz() {
    String a = "astring";
    return a;
}

public String bar() {
    String b = "astring"
    return b;
}

public void main() {
    String a = baz()
    String b = bar()
    assert(a == b) // passes
}

私の質問は、CPython (または他の Python ランタイム) が文字列に対して同じことを行うかどうかです。たとえば、クラスがある場合:

class example():
    def __init__():
        self._inst = 'instance' 

そして、このクラスのインスタンスを 10 個作成します。それぞれに、メモリ内の同じ文字列を参照するインスタンス変数がありますか?それとも 10 個の個別の文字列になってしまうでしょうか?

4

4 に答える 4