2016-03-30 8 views
1

最近、JavaでStringクラスのソースコードを見ました。そして、XXX.valueのように頻繁に表示されることがわかりました。このように:anotherString.valueはJavaのStringクラスのソースコードでどのように動作するのですか?

public int compareTo(String anotherString) { 
     int len1 = value.length; 
     int len2 = anotherString.value.length; 
     int lim = Math.min(len1, len2); 
     char v1[] = value; 
     char v2[] = anotherString.value; 

      int k = 0; 
      while (k < lim) { 
      char c1 = v1[k]; 
      char c2 = v2[k]; 
      if (c1 != c2) { 
       return c1 - c2; 
      } 
      k++; 
     } 
     return len1 - len2; 
    } 

しかし、この方法で宣言された値は[]:

private final char value[]; 

値は[]上からプライベートで、どのようにanotherString.valueが動作することができますか?

+3

これはStringクラス自体の内部にあるため、プライベートクラス変数を読み取ることができます。 –

+0

ありがとうございます〜 –

答えて

2

OOPは、プライベートオブジェクトがクラスに対してプライベートであることを指定します。

プライベート修飾子はカプセル化の原則を適用します。

文字列の実装が時間の経過とともに変更される可能性があるため(外部世界全体を変更して実装の違いを修正する必要があります)、これはほぼ不可能です)。

Stringのインスタンスが他のStringインスタンスの内部にアクセスする場合、両方のインスタンスが常にStringの実装の詳細を認識することができます。 Stringプロセスの内部ロジックが変更された場合は、Stringのコードを変更するだけです。

+0

ありがとうございます〜 –

関連する問題