0

具体的には、オリジナルが null の場合、NullPointerException をスローします。しかし、javadocs はそれについて言及していません。

明示的なコピーが必要でない限り、このコンストラクターは必要ないはずですが、文字列を含むいくつかの大きなオブジェクトのコピーコンストラクターを作成していますが、明示的なコピーを作成することはおそらく厳密には必要ではありません。この場合、明示的なコピーを取得しています。私は、非効率性に少額の代償を払っても構わないと思っています。

しかし、この javadoc にスローがあるべきではありませんか?

4

6 に答える 6

6

JavaTM 2 Platform Std. エド。v1.4.2 :

特に明記されていない限り、このクラスのコンストラクターまたはメソッドに null 引数を渡すと、NullPointerException がスローされます。

于 2012-12-14T23:50:31.810 に答える
1

NullPointerExceptionは未チェックの例外であるため、非常に知識が豊富な場合は、@throws 行を javadoc に追加できますが、追加しない方がよいでしょう。意味をなさない場所で null を渡すと、NPE が発生すると想定されます。(チェックされていない例外は、例外的ではあるが有効なシナリオではなく、コーディング エラーを示すことが多いです。)

Andnew String( null )は意味がありません。コンストラクターはnull.

文字列は不変であるため、文字列のコピーもまったく不要です。

于 2012-12-14T23:48:20.313 に答える
0

文字列は不変です。String myString = new String("blah");ヒープ内に新しいオブジェクトが作成されるため、 を作成する必要はありません。String myString = "blah";文字列プールにリンクして実行することをお勧めします。

String myString = "blah";
String myOtherString = myString;

myOtherString = "";
// at this point myString == "blah"
于 2012-12-14T23:48:16.347 に答える
0

ドキュメントの問題は、受け入れられた回答によって対処されています。

このコメントに返信したいだけです...これがおそらくあなたの問題の根源です。

ただし、null を渡す意味がないことを前提としています。多くのデータ メンバー フィールドを持ち、そのうちのいくつかは文字列であり、null の場合もそうでない場合もある Object をコピーするとします。その場合、String(String) に null を返してもらいたい、具体的には、null 値をコピーしてもらいたい。

それは不可能です。JLS は、new操作が ではなく新しいオブジェクトを生成することを具体的に述べていnullます。

「オブジェクトを作成して返す」ことができるようにしたい場合nullは、このロジックを何らかのファクトリ メソッドに埋め込む必要があります。例えば

String myNewString(String s) {
    return s == null ? s : new String(s);
}

しかし、ほとんどの場合、Java でa をコピーすることStringは不必要で無駄が多いことにも注意してください。これは、アプリケーションが文字列のオブジェクト ID を明確に利用している場合にのみ行う必要があります。つまり、==文字列オブジェクトを比較するために使用し、 と比較する同じ文字を持つ文字列に依存falseします。(それを必要とするアプリケーションはかなりまれです...)

于 2012-12-15T00:17:13.243 に答える
0

このコンストラクターのjavadoc は次のように述べています。

オリジナルの明示的なコピーが必要でない限り、文字列は不変であるため、このコンストラクターの使用は不要です。

だから絶対に呼んではいけません。

また、null を渡す場合は NPE をスローするのが合理的だと思います

于 2012-12-14T23:52:21.383 に答える
0

RuntimeException は、API の不適切な使用 (null オブジェクトを使用) を示す例外用に予約されており、Java プログラムのどこでも発生する可能性があるため、String クラス (または特定のクラス) に固有のものではありません。

于 2012-12-14T23:53:57.040 に答える