隨筆 - 37  文章 - 29  trackbacks - 0


          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜


          先看一個(gè)簡(jiǎn)單的例子:
          public class Test1 {
              public static void operateString(String s) {
                  s.replace("j", "i");
              }

              public static void operateStringBuffer(StringBuffer sb) {
                  sb.append("C");
              }

              public static void main(String args[]) {
                  String sa = new String("java");
                  StringBuffer sba = new StringBuffer("java");
                  operateString(sa);
                  operateStringBuffer(sba);
                  System.out.println(sa);
                  System.out.println(sba);
              }
          }
          答案很簡(jiǎn)單:
          java
          javaC

          原則:
          1.String是不可變對(duì)象:public final class String extends Object
          2.java中只有值傳遞

          replace函數(shù)源碼中:
          public String replace(char oldChar, char newChar) {
               ...
               return new String(0, len, buf);
          }
          返回的是另一個(gè)String對(duì)象。
          而在上面的
          operateString方法中,是無(wú)返回值的,新產(chǎn)生的String對(duì)象被丟棄了,而sa仍然指向最初的那個(gè)String對(duì)象。


          第二個(gè)例子:
          public class Test2 {
              public static void operate(StringBuffer x, StringBuffer y) {
                  x.append(y);
                  y = x;
              }

              public static void main(String args[]) {
                  StringBuffer buffA = new StringBuffer("a");
                  StringBuffer buffB = new StringBuffer("b");
                  operate(buffA, buffB);
                  System.out.println(buffA + "," + buffB); 
              }
          }
          答案是:
          ab,b

          開始時(shí)a、x指向同一個(gè)StringBuffer對(duì)象(這里稱它為對(duì)象1),它的值是"a";
                      b、y指向同一個(gè)StringBuffer對(duì)象,它的值是"b"。
          執(zhí)行x.append(y)時(shí),對(duì)象1的值被改變,變?yōu)?ab";
          而執(zhí)行y=x時(shí),變量y指向被改變,指向了和x同一個(gè)StringBuffer對(duì)象。但是變量b的指向還是沒有改變,所以仍然為"b"


          posted on 2008-04-08 20:59 EvanLiu 閱讀(1498) 評(píng)論(2)  編輯  收藏 所屬分類: Java基礎(chǔ)

          FeedBack:
          # re: String StringBuffer 2008-11-04 15:25 sclsch
          2.java中只有值傳遞

          不是吧,java對(duì)于基本類型是傳遞的是值的copy,
          對(duì)于對(duì)象類型傳遞的是引用的copy.
          public static void operate(StringBuffer x, StringBuffer y) {
          x.append(y);
          y = x;
          }
          雖然y指向?qū)ο骯b,但buffB 仍然指向了b  回復(fù)  更多評(píng)論
            
          # re: String StringBuffer 2008-11-27 16:27 EvanLiu
          是的,對(duì)象類型傳遞的是引用的copy,但這個(gè)copy就是一個(gè)value
          a Java application passes object references by value  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 南安市| 南郑县| 开平市| 沙洋县| 明溪县| 门头沟区| 宾阳县| 华阴市| 昌平区| 遵化市| 汾西县| 珲春市| 蕉岭县| 彭阳县| 邮箱| 蓬溪县| 定安县| 虹口区| 安新县| 申扎县| 柞水县| 思茅市| 横峰县| 海淀区| 保康县| 沙田区| 兴文县| 遂昌县| 靖远县| 抚顺县| 贵港市| 延川县| 行唐县| 松江区| 宁阳县| 黎平县| 玛曲县| 博湖县| 涡阳县| 建平县| 同江市|