2010-12-29 15 views
1

こんにちは、私はUriが不変の参照として見つかっています。私はそれが不変の参照の正確な意味を知っていません...だれでも私を助けることができますか?不変参照とは何ですか?

答えて

4

それはそれはできない変数です一度変更すると変更されます。変数の値を変更することができるため、コード内で問題を見つけるのが難しいかもしれないので、マルチスレッドコードを使用すると非常に便利です。

不変の場合は、通常は問題ありません。

+0

uriの構文解析メソッドの使い方は? –

+0

ドキュメントを確認してください:http://developer.android.com/reference/android/net/Uri.html#parse(java.lang.String) – kcoppock

+0

@satheesh:@ kcoppockのコメントに加えて、[このSOスレッド](http://stackoverflow.com/questions/444112/how-do-i-encode-uri-parameter-values)をチェックしてください。 – darioo

0

「不変」は「不変」==「変更不可」「変更」

==「可変」

を「値を変更することはできません」という意味

2

.NET Framework内の不変クラスの良い例は、System.Stringです。 Stringオブジェクトを作成したら、それを変更することはできません。その周りに方法はありません。それがクラスの設計方法です。コピーを作成することはできますが、それらのコピーは元のフォームに変更することができますが、安全でないコードに頼らずに、元のインスタンスを変更することはできません。もしあなたがそれを理解しているなら、私はここにどこに行くのかという要点を得るようになっているはずです。メソッドに渡される参照ベースのオブジェクトの場合、メソッド呼び出し中にクライアントが変更されないことが保証されるそれ自体は不変でなければならない。

デフォルトでオブジェクトが参照によって保持されるCLRなどの世界では、この不変性の概念は非常に重要になります。のは可能System.Stringは可変だったと仮定しましょう、そしてあなたは、次の架空法などを書くことができたとしましょう:彼らは、このメソッドを呼び出し、現在はコード内に沿ってさらに取得するとき

public void PrintString(string theString) 
{ 
    // Assuming following line does not create a new 
    // instance of String but modifies theString 
    theString += ": there, I printed it!"; 
    Console.WriteLine(theString); 
} 

は、呼び出し元の落胆を想像してみてそれらの文字列にはこの余分なものが最後に付加されています。これがSystemの場合に起こりうることです。文字列は変更可能でした。ストリングの不変性が理由で存在することがわかります。また、デザインに同じ機能を追加することを検討する必要があります。元 Console.Write(s.ToUpper())
の文字列は不変です...
uは大文字と元文字列s = "何でも"
とuの出力それを持っている場合...

+0

は最終版と同じですか? –

+0

@ satheesh.droid:NO! – fiction

+0

wats dの違いは? –

2

EXは、コンソールはWHATVERを出力しますが、文字列sはまだ何でも...文字列をWHATEVERから文字列に変更する可変型とは異なります

0

Javaでは、すべてのものがStringとObjectとして扱われます10000行のプログラムを作成していれば、そこには「public」が100回追加されていると思いますので、このパブリックがストレージに作成されるたびにそれがあると思いますか?そうでない場合は、私たちは何かを作成することができます。このようなものを見つけたらそこから取得します(文字列プール)

関連する問題