1. Public class test (
2. Public static void stringReplace (String text)  (
3.      Text = text.replace (‘j’ , ‘i’);
4. )
5.  
6. public static void bufferReplace (StringBuffer text)  (
7.     text = text.append (“C”)
8. ) 
9.  
10. public static void main (String args[]}  (
11.    String textString = new String (“java”);
12.    StringBuffer textBuffer = new StringBuffer (“java”);
13.  
14.     stringReplace (textString);
15.     BufferReplace (textBuffer);
16.  
17.     System.out.printIn (textString + textBuffer);
18.     }
19.  )
最后的结果是javajavac,在11行,定义了一个普通的字符串,而12行定义的是一个缓冲字符串,普通的字符串在本身是不可改变的,除非重新赋值,所以在执行到StringReplace后,返回还是java这个字符串。而缓冲字符串和普通字符串的区别在于,它是可以对于本身进行操作,所有的操作执行后都在自身的基础上做改变,所以,在执行BufferReplace后,字符串即变成了javac。:)

解决方案 »

  1.   

    不是吧,如果你在
    Public static void stringReplace (String text) {
         Text = text.replace (‘j’ , ‘i’);
               system.out.println(Text);//加上这句,你就会发现Text的值变成了iava 而输出却是javajavac.搞不懂!
    }
      

  2.   

    stringReplace (textString);你这个传递进去的只是局部变量它不会改变main方法中的text的值(java),所以stringReplace方法改变不了java为iava,(在main方法中)但bufferReplace就跟 leonkokona(蓝色动力)说的那样
    ==================================================================注意:此人因发表爱国言论,被斑竹hexiao*扣除6分信誉分,问你死未?!
      

  3.   

    java没有全局变量这样的说法难道有局部变量吗???
      

  4.   

    java没有全局变量这样的说法难道有局部变量吗???
      

  5.   

    是啦,textString 是个外部变量在stringReplace ()方法不会改变他的值。
    stringReplace ()方法内部Text 的值是iava可以理解。
    Text和textString两个变量没有任何关系。所以System.out.printIn (textString + textBuffer);这一句中textString是什么还是什么,never changed!
      

  6.   

    可以这样说吧在:
    在stringReplace (textString);中传递过去的只是textString句柄的一个副本而已,方法stringReplace只是对这个副本操作,对textString本身是没有操作的。==================================================================注意:此人因发表爱国言论,被斑竹hexiao*扣除6分信誉分,问你死未?!
      

  7.   

    String.replace()不改变自身,只是重新new 一个StringStringBuffer.append()是修改自身,返回this
    所以结果 javajavaC
      

  8.   

    10. public static void main (String args[]}  (
    11.    String textString = new String (“java”);
    12.    StringBuffer textBuffer = new StringBuffer (“java”);
    13.  
    14.     stringReplace (textString);
    15.     BufferReplace (textBuffer);
    16.  
    17.     System.out.printIn (textString + textBuffer);
    18.     }
    19.  )
    如果我们把上述代码中的14行改为:textString=stringReplace(textString);//给字符串重新赋值
    然后再把
    2. Public static void stringReplace (String text)  (
    3.      Text = text.replace (‘j’ , ‘i’);
    4. )
    改成
    2. Public static String stringReplace (String text)  (
    3.      Text = text.replace (‘j’ , ‘i’);
                  return Text;  //将text的值返回到主方法4. )
    的话,那么就是iavajava!因为在stringReplace中的text是一个形参,且不返回重新赋给主方法中的textString,所以,主方法中的textString值不变!
      

  9.   

    1. public class test {
    2.      public static void add3 (Integer i) }
    3.       int val = i.intValue ( );
    4.           val += 3;
    5.           i = new Integer (val);
    6.      }
    7.  
    8.   public static void main (String args [ ] )  {
    9.    Integer  i = new Integer (0);
    10.     add3 (i);
    11.      system.out.printIn (i.intValue ( )  );
    12.   }
    13. )What is the result?A. Compilation will fail.
    B. The program prints “0”.
    C. The program prints “3”.
    D. Compilation will succeed but an exception will be thrown at line 3.
    在侃侃这道!
      

  10.   

    跟String没有区别==================================================================注意:此人因发表爱国言论,被斑竹hexiao*扣除6分信誉分,问你死未?!
      

  11.   

    不是已经说了吗:回复人: beming(Aming) (  ) 信誉:94  2002-09-19 12:00:00  得分:0  Top 
     
     可以这样说吧在:
    在stringReplace (textString);中传递过去的只是textString句柄的一个副本而已,方法stringReplace只是对这个副本操作,对textString本身是没有操作的。  
     
      

  12.   

    看看书吧,StringBuffer和String的区别
      

  13.   

    回复人: beming(Aming) (  ) 信誉:94  2002-09-19 14:22:00  得分:0 Top 
     
     跟String没有区别  
     
    ==================================================================注意:此人因发表爱国言论,被斑竹hexiao*扣除6分信誉分?!
      

  14.   

    add3中的i只是指向Integer(0)的引用 (这个i跟main中的i完全不是一个引用,只不过指向的对象一致),i = new Integer (val)之后, i指向Integer(3),main中 i指向Integer(0)的引用,调用add3后由于引用的值 不能被改变,所以还是指向 Integer(0)