エクスプレッショントラップ(文字列、エクスプレッションタイプ、入力メソッド、コメント文字、エスケープ文字、正規表現)




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