MDA/MDD/TDD/DDD/DDDDDDD
          posts - 536, comments - 111, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          java知識(shí)點(diǎn)

          Posted on 2011-03-13 23:38 leekiang 閱讀(307) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 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指向的對(duì)象一樣,但是這兩個(gè)引用在棧中的位置不一樣。
          過(guò)程大概是首先在棧中復(fù)制引用a為a',b為b',并令a'指向a所指的在堆中的StringBuffer對(duì)象,b'指向b所指的在堆中的StringBuffer對(duì)象。
          因此方法中的b=a只是起到了b'=a'的作用,并沒(méi)有影響方法外b的指向。
          ??????? 其實(shí)public static void append(StringBuffer a, StringBuffer b)中的變量a,b只是main方法中的變量a,b的引用地址副本,也就是說(shuō)相當(dāng)于append中的a與main中的a是指向同一個(gè)地址,append中 的b與main中的b是指向同一個(gè)地址,所以a.append(b)操作影響到了main方法中的a,但是append方法中的b=a;操作只是改變了 append方法的中b的指向,并沒(méi)有改變main方法中b的指向。
          ??????? java是按值傳遞,對(duì)象類(lèi)型的話,分為棧上的引用和堆上的對(duì)象,棧上的引用被復(fù)制一份,如果操作堆上的對(duì)象則對(duì)象改變,但是如果操作引用則不改變
          ??????? java方法的參數(shù)傳遞有兩種規(guī)則:(1)按值傳遞(by value) ,八種基本數(shù)據(jù)類(lèi)型和String? (2)按址傳遞(by address) ,除String以外的所有復(fù)合數(shù)據(jù)類(lèi)型,包括數(shù)組、類(lèi)和接口

          3,如果使用switch,那么每一個(gè)case和default里都要加break

          Java容易搞錯(cuò)的知識(shí)點(diǎn)
          主站蜘蛛池模板: 寿光市| 石林| 大埔区| 蒙阴县| 连南| 遵化市| 乌海市| 岳普湖县| 宁陕县| 隆化县| 伊吾县| 大足县| 铜鼓县| 宁晋县| 江津市| 深水埗区| 青田县| 吴川市| 清水县| 双鸭山市| 邮箱| 霞浦县| 贵溪市| 日照市| 南部县| 共和县| 辽中县| 丰县| 临城县| 新沂市| 容城县| 黄浦区| 丰原市| 苍溪县| 阳山县| 抚松县| 玉树县| 繁昌县| 浏阳市| 福州市| 金川县|