java字符串传值问题

来源:互联网 发布:淘宝店没有发布宝贝 编辑:程序博客网 时间:2024/05/21 15:06
package Test01;public class test03 {      public static void stringUpd(String str) {   str = str.replace("j", "l");   System.out.println(str);  }         public static void stringBufferUpd(StringBuffer bf) {   bf.append("c");   System.out.println(bf);  }     public static void main(String[] args) {      /**    * 對於基本類型和字符串(特殊)是傳值    * 对于字符串,一旦定义,不能更改    * (1)定义方式之一:String s1 = "java";    * java放在字符常量池中    * 因为字符串不能更改,所以传递参数时,是传值(传副本)    *     *     * (2)定义方式之二:String s2 = new String("java");    * 先检查字符常量池中是否有java字符串,如果有,String s2=new String("java"),    * 然后new String()又在堆中分配了内存空间,将常量区中的“java"复制一份给了堆中的String对象。    *     *     * 先检查字符常量池中是否有java字符串,如果没有    * String s2=new String("java"),此时先是在String常量池中产生了一个“java”对象,    * 然后new String()又在堆中分配了内存空间,将常量区中的“java"复制一份给了堆中的String对象。    * 因此这段代码产生了两个对象,一个在常量区、一个在堆区。    *     * 輸出lava,java    */   String s1 = "java";   stringUpd(s1);   System.out.println(s1);   System.out.println("-----------------------------");      String s2 = new String("java");   stringUpd(s2);   System.out.println(s2);   System.out.println("-----------------------------");      /**    * 對於對象而言,傳的是引用,而引用指向的是同一個對象   *     * 輸出javac,javac    */   StringBuffer bb = new StringBuffer("java");   stringBufferUpd(bb);   System.out.println(bb);  }}/* 输出lavajava-----------------------------lavajava-----------------------------javacjavac*/


0 0
原创粉丝点击