Posted on 2011-03-13 23:38
leekiang 閱讀(304)
評論(0) 編輯 收藏 所屬分類:
java
1,
double d =?1?/?4;System.out.println(d);//輸出為0
2,??? public static void main(String[] args) {
??? ??? StringBuffer a = new StringBuffer("a");
??? ??? StringBuffer b = new StringBuffer("b");
??? ??? append(a, b);
??? ??? System.out.println(a.toString() + "," + b.toString());//輸出為"ab,a"
??? }
??? public static void append(StringBuffer a, StringBuffer b) {
??? ??? a.append(b);
??? ??? b = a;
??? }
?? 解釋:由于java方法傳值是值傳遞,所以方法里面的a,b雖然和方法外的a,b指向的對象一樣,但是這兩個(gè)引用在棧中的位置不一樣。
過程大概是首先在棧中復(fù)制引用a為a',b為b',并令a'指向a所指的在堆中的StringBuffer對象,b'指向b所指的在堆中的StringBuffer對象。
因此方法中的b=a只是起到了b'=a'的作用,并沒有影響方法外b的指向。
??????? 其實(shí)public static void append(StringBuffer a, StringBuffer
b)中的變量a,b只是main方法中的變量a,b的引用地址副本,也就是說相當(dāng)于append中的a與main中的a是指向同一個(gè)地址,append中
的b與main中的b是指向同一個(gè)地址,所以a.append(b)操作影響到了main方法中的a,但是append方法中的b=a;操作只是改變了
append方法的中b的指向,并沒有改變main方法中b的指向。
??????? java是按值傳遞,對象類型的話,分為棧上的引用和堆上的對象,棧上的引用被復(fù)制一份,如果操作堆上的對象則對象改變,但是如果操作引用則不改變
??????? java方法的參數(shù)傳遞有兩種規(guī)則:(1)按值傳遞(by value) ,八種基本數(shù)據(jù)類型和String?
(2)按址傳遞(by address)
,除String以外的所有復(fù)合數(shù)據(jù)類型,包括數(shù)組、類和接口
3,如果使用switch,那么每一個(gè)case和default里都要加break
Java容易搞錯(cuò)的知識(shí)點(diǎn)