エクスプレッショントラップ(文字列、エクスプレッションタイプ、入力メソッド、コメント文字、エスケープ文字、正規表現)
1.
1.1
1. String s = new String("java"); ,JVM "java" , 。 , new String , :java.lang.String@123b, , new , 。
2. Java :
ü new java 。
ü Class newInstance() java 。
ü java IO java 。
ü java clone() java 。
3. java ,JVM : ,JVM 。 , , , , 。
4. java :
String str1 = "liyafang";
String str2 = "liyafang";
System.out.println(str1==str2);//true
// str4 , ,
// str4 。
String str3 = "liyafang2";
String str4 = "li"+"yafang"+2;//
System.out.println(str3==str4);//true
//str6 , , JVM
String str5 = "liyafang8";
String str6 = "liyafang"+"liyafang".length();
System.out.println(str5==str6);//false
//str8 , , JVM
int len = 1;
String str7 = "liyafang1";
String str8 = "liyafang"+len;
System.out.println(str7==str8);//false
// " ",
// JVM
final String temp = "li";
String str9 = "liyafang";
String str10 = temp+"yafang";
System.out.println(str9==str10);//true
final int leng = 8;
String str11 = "liyafang8";
String str12 = "liyafang"+leng;
System.out.println(str11==str12);//true
5. : String str = "I";
System.out.println(System.identityHashCode(str));
// hashCode ,
//hashCode 。 , identityHashCode 。
str = str+" love ";
System.out.println(System.identityHashCode(str));
str = str+"java!";
System.out.println(System.identityHashCode(str));
:
31843011
25860399
5184781
strに する シーケンスが されるように えます.しかし、strは タイプ にすぎず、 のStringオブジェクトではなく、Stringオブジェクトを しているだけで、 に したのはstr であり、 を え、 しいStringオブジェクトを していることを えておいてください. のプログラムでは、 プールに「I」、「I love」、「I love java!」の3つの オブジェクトが されます.これがjavaメモリの の の1つです.
6.StringBuilderの を :
StringBufferと の いは、StringBufferがスレッドが であること、つまりStringBufferクラスのほとんどの がsynchronized を していることです. スレッド では、StringBuilderが であるため、 に されます.
7.StringクラスはComparableインタフェースを した:
2つの のサイズはcompareTo()メソッドで でき、2つの に まれる が しい 、 り は0です. ルール:2つの を えにしてから、2つの に まれる を から に に します. きな を む の が きいです.
1.2 タイプのトラップ
1. タイプの :
byte->short;
short,char->int->long->float->double
eg: short a = 5; a = a -2;intがshortタイプに り てられた にエラーが するため、エラーが します.
2. のトラップ:
short a = 5; a -=2; エラーはありません.java によると、 は なタイプ を むため、a=(aのタイプ)(a-2)に です.これと に+=,*=,/=,%=,<=,>>=,>>=,&=,^=および|=などがある.
の を てみましょう.
short st = 15;
st += 90000;
System.out.println(st);// は900015ではなく24479です
shortタイプの は-32768~32767の の しか け れられないため、 のプログラムは を「 」します.
は で、 で、 の がありますが、 には のリスクがある があります. な なタイプ は、 らず らずのうちに の が される があります. な を するために、 の に する があります.
をbyte,short,charなどの に する.intタイプの に され、 の はlong、float、doubleクラスの です.floatタイプに される で、 の にdoubleタイプの があります.
+が コネクタに される 、+=の はStringタイプのみであり、Stringの タイプ(ObjectやCharSequenceなど)ではありません.
1.3 インプットメソッドによるトラップ
にjavaプログラムをコンパイルするときに「 :xxxx」というエラーメッセージが された 、javaプログラムに「 」が まれていると し、1つずつ すればよい.
1.4 コメントの は でなければなりません
Javaでは、コメント のすべての が な である があります.Javaプログラムは、uXXXXの を して を すことを し、それはuの ろの4 が0~F でなければならないことを し、 に「unit 5」が れた 、javaのUnicodeのエスケープ に する に わない.
1.5 エスケープ のトラップ
Javaプログラムでは、 を す3つの があります.
「a」などの で まれた を します.
「」などのエスケープ を します.
Unicodeエスケープ を します.
しかし、 の は に わなければなりません. のようにします.
System.out.println(“abc\u000a”.length());この はコンパイルできません.ヒント: していない の .これはjavaがUnicode に して な を わず、 に する に き えるためです.<0 aの 、 ()に するので、 のプログラムは のようになります.
System.out.println(“abc
”.length());
これでコンパイルエラーが したことを するのは しくありません.
の 、 のコメントはコンパイルできません.
/<0 aは を します.
Javaコンパイラにとっては
//
を します.
1.5 のトラップ
のプログラムは も しません.なぜか えてみましょう.
String str = "www.baidu.com";
String[] str1 = str.split(".");
for(String s:str1){
System.out.println(s);
}
JDK 1.4からjavaのStringクラスはsplit()メソッドを して の を います.JDK 1.0が していたStringTokenizerは に「 」になっています.
の では、 の に してください.
1.Stringが するsplit(String regex)メソッドに なパラメータは である.
2. のポイント(".")は、 の に します.
したがって、 のプログラムは には「.」を り とするのではなく、 の を り とする.「.」を り とする を するためには、「.」 をエスケープし、 のプログラムを
String[]str 1=str.split("\."); の が られます.
JDK 1.4からJavaは のサポートを し、Stringクラスは をサポートする を しました. な は の りです.
matches(String regex): した に が するかどうかを します.
String replaceAll(String regex,Stringreplacement): した に する のすべてのサブストリングをreplacementに き えて します.
String replaceFirst(String regex,Stringreplacement): の の に するサブ をreplacementに き えて します.
String[]split(String regex):regex で するサブ を として を します.
replace(CharSequence target,CharSequencereplacement): のすべてのtargetサブストリングをreplacementに き えて します.この なreplace()メソッドでは はサポートされておらず、 ではreplaceAllとreplaceの2つのメソッドを する があります.
:
String str = "www.baidu.com";
String str1 = str.replace(".", "\\");
String str2 = str.replaceAll("\\.", "\\\\");
System.out.println(str 1);// :wwwbaiducom
System.out.println(str 2);// :wwwbaiducom