文字列のヌル値またはヌル値が判断されます
開発プロセス中、私はしばしば次の間違った使用に遭遇します。
1。エラー使用量1:
if(name == ""){//何かをする} 2。エラー使用量2:
if(name.equals( "")){//何かをする}
3。エラーの使用3:
if(!name.equals( "")){//何かをする}
説明しましょう:
上記のエラー使用量1は、初心者が発見する可能性が最も高い間違いであり、構文自体が問題なく、Javaコンパイラがコンパイル時にエラーを報告しないため、発見される可能性が最も低いです。ただし、この状態は、実行時にプログラムにバグを引き起こす可能性があり、決して真実ではありません。言い換えれば、IFブロックの声明は決して実行されません。
上記の使用法2および使用法3は、多くのJavaプロフェッショナルが簡単に作成できる間違いを含め、書かれています。なぜそれが間違っているのですか?多分あなたは困惑するでしょう。
はい、彼らの執筆は正しいですが、ヌルの判断条件が不足しています。想像してみてください、name = nullの場合はどうなりますか?その結果、プログラムはnullpointerexceptionの例外をスローし、システムは停止され、通常のサービスを提供しなくなります。
もちろん、以前に名前についてヌルの判断を下したことがある場合、例外はそうです。
それを書く正しい方法は、最初に名前の条件を追加する必要があります!= nullなど:
if(name!= null &&!name.equals( "")){//何かをする}または
if(! ""。equals(name)){// write ""の前に、名前がnullであるかどうかに関係なく、エラーはありません。 //何かをする}
ここで、簡単な例を見てみましょう。
testnullorempty.java
public class test {public static void main(string args []){string value = null; testnullorempty(value); value = ""; testnullorempty(value); value = ""; testnullorempty(value); value = "hello me"; testnullorempty(value); } static void testnullorempty(string value){if(value == null){system.out.println( "value is null"); } else if( "" .equals(value)){system.out.println( "値は空白ですが、nullではありません"); } else {system.out.println( "value is /" " + value +" /""); } if(value == ""){// ng //この書き込みを使用しないでください}}}実行のコンパイル:
c:/> javac testnullorempty.javac:/> java testnullorempty
値はnull.valueは空白ですが、null.valueは「hello me!」
文字列アドレスを等しく比較します
パッケージcom;パブリッククラスA { / ** * @param args * / public static void main(string [] args){string a = "hello";文字列b = "he";文字列c = a.substring(0、2); System.out.println(b.equals(c)); // true system.out.println(b == c); // false string d = new String( "hello"); system.out.println(d.equals(a)); // true system.out.println(d == a); // false string e = new StringBuilder( "hello")。toString(); System.out.println(e.equals(a)); // true system.out.println(e == a); // false system.out.println(e.equals(d)); // true system.out.println(e == d); // false string f = "hello"; System.out.println(f.equals(a)); // true system.out.println(f == a); // true system.out.println(f == "hello"); // true system.out.println(f == "hell"+"o"); system.out.println(g == f); // false string h = "he"+"llo"; system.out.println(h == f); // true}}要約:
1.新品の文字列はメモリを再割り当てすること、文字列は共有されず、複数の新しいものが共有されません。
2。スプライスまたは傍受される文字列と静的文字列変数は、文字列関数を介して共有されません。
3.プラスサインで得られた文字列には2つの状況があります。
「彼」+「llo」は静的文字列で、共有されています
b文字列a = "he"; a+"llo"は静的な文字列ではなく、共有されていません