我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          一家公司的幾道筆試題

          public class Jtest{
          int m=1;
          int i=3;
          void Jtest(){
          m
          =2;
          i
          =4;
          }


          public static void main(String[] args){
          Jtest app
          =new Jtest();
          System.out.println(app.m
          +","+app.i);
          }

          }

          寫出輸出.
          結果是1,3;
          因為在這里void Jtest();并沒有并調用,它只是一個
          方法,而非構造方法,這樣的編寫是有警告的,不過
          可以運行.

          public class Jtest{
          int m=1;
          int i=3;
          Jtest()
          {
          m
          =2;
          i
          =4;
          }

          public static void main(String[] args){
          Jtest app
          =new Jtest();
          System.out.println(app.m
          +","+app.i);
          }

          }

          寫出輸出:
          結果是2,4;
          調用了構造方法,不加修飾符,默認訪問權限是
          package access,在Java里沒有關鍵字表示,就是
          包內的能訪問,包外就不行了(即使導入也不行).
          public class Test
          {
              
          static void oper(int b)
              
          {
                  b 
          = b + 100;
              }

              
              
          public static void main(String[] args)
              
          {
                  
          int a = 99;
                  oper(a);
                  System.out.println(a);
              }


          }

          輸出為99.
          我們來分析一下內存:
          int a = 99;
          首先在棧里面開辟一塊空間保存a
          比如:a:xxxx
          然后調用oper(a);
          這時把a 的值99賦給int b;
          b在內存里也開辟了自己的空間,此時
          值也是99.
          然后執行oper(a);方法體,b = b + 100;
          此時b的值為199,a的值為99.
          public class Test {
            
          public static void main(String[] args) {
                  String a
          =new String("A");
                  String b
          =new String("B");
                  oper(a,b);
                  System.out.print(a
          +","+b);
              }

            
          static void oper(String c,String d){
                c.concat(
          "B");
                d
          =c;
            }

          }


          此程序輸出:A和B.
          原因就是String是final類型的.并不會被改變.
          public class Test
          {
              
          public static void main(String[] args)
              
          {
                  String a 
          = new String("A");
                  String b 
          = new String("B");
                  a.concat(
          "aa");
                  System.out.println(a 
          + "," + b);
              }


          }


          這個還是會輸出A,B
          原因同上.
          package intervie;

          public class Test
          {
              
          public static void main(String[] args)
              
          {
                  String a 
          = new String("A");
                  String b 
          = new String("B");
                  a 
          = a.concat("aa");
                  System.out.println(a 
          + "," + b);
              }


          }


          做了下改動,再來看看.結果就不同了.
          輸出的是Aaa,B
          因為String 是final類型的.所以執行到
          a = c.concat("aa");
          會在heap里新創建一個對象,而a指向它.
          這是一新的地址,同String a 這個已經不同了.
          所以輸出的是后一個.即改變后的值.
          public class Test
          {
              
          static void oper(StringBuffer c,StringBuffer d)
              
          {
                  d 
          = c.append("B");
              }

              
              
          public static void main(String[] args)
              
          {
                  StringBuffer a 
          = new StringBuffer("A");
                  StringBuffer b 
          = new StringBuffer("B");
                  oper(a, b);
                  System.out.println(a 
          + "," + b);
              }


          }


          此程序會輸出:AB,B

          StringBuffer是可變的線程安全的.
          原試題下載地址:點此下載



          posted on 2007-12-09 08:15 々上善若水々 閱讀(696) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 林周县| 呼图壁县| 砀山县| 迁安市| 桓仁| 云安县| 林州市| 白玉县| 讷河市| 广饶县| 盐池县| 正蓝旗| 凤阳县| 涡阳县| 株洲市| 泽库县| 盐池县| 抚顺市| 彩票| 乡宁县| 桦川县| 江阴市| 大城县| 阜新| 万宁市| 凉城县| 高陵县| 博白县| 阜平县| 大足县| 鹰潭市| 潼关县| 濮阳县| 通渭县| 太白县| 涞水县| 阳谷县| 金阳县| 聂拉木县| 翼城县| 桐城市|