黑马程序员技术交流社区

标题: 引用类型问题 [打印本页]

作者: 王新年    时间: 2014-1-7 14:31
标题: 引用类型问题
package st;

public class Tests {
        public static void main(String[] args) {
                // TODO 自动生成的方法存根
                String s1="wxn";
                String s2="ynn";
                StringBuffer sb1=new StringBuffer("wxn");
                StringBuffer sb2=new StringBuffer("ynn");
                method(s1,s2);
                //既然StringBuffer 是引用类型为什么在调用该方法后s1没用改变值
                System.out.println(s1+"......"+s2);
                method1(sb1,sb2);
                //由于StringBuffer是引用类型所以sb1的值会改变
                System.out.println(sb1+"....."+sb2);
               

        }
   public static void method(String s1,String s2){
         //  s1=s2;
           s1.replace('w', 'y');
   }
   public static void method1(StringBuffer sb1,StringBuffer sb2){
           //sb1=sb2;
           sb1.append("wxn");
   }

}


求技术分
作者: 猎鹰tianya    时间: 2014-1-7 14:58
麻烦lz把代码写在代码框好不,这样看着太闹心啊!{:soso_e118:}
作者: 午夜b'Boy    时间: 2014-1-7 16:02
String对象建立时没有用new关键字,还是值传递
作者: IT人    时间: 2014-1-7 16:04
package com.itheima;

public class Tests {
        public static void main(String[] args) {
        // TODO 自动生成的方法存根
        String s1="wxn";
        String s2="ynn";
        StringBuffer sb1=new StringBuffer("wxn");
        StringBuffer sb2=new StringBuffer("ynn");
        method(s1,s2);
        //既然StringBuffer 是引用类型为什么在调用该方法后s1没用改变值
        System.out.println(s1+"......"+s2);
        method1(sb1,sb2);
        //由于StringBuffer是引用类型所以sb1的值会改变
        System.out.println(sb1+"....."+sb2);
        

}
public static void method(String s1,String s2){
/*先定义一个字符串来区分,这样更有助于你理解。String oldStr
* s1为引用型变量,指向字符串s1,为了区分我们把引用型变量称为s11
* 当s11.replace('w', 'y');时候如果在字符创中有字符'w',则替换成功,则创建一个新的字符串newStr = “yxn”;
* 但是s11指向的字符串oldstr没有改变,所以打印的还是老的字符串
*/
        //  s1=s2;
   s1.replace('w', 'y');
}
public static void method1(StringBuffer sb1,StringBuffer sb2){
   /*
    * sb1.append("wxn")这句代码中是往这个引用sb1指向的序列中家中一个序列,所以sb1指向的序列发生了改变
    * */
        //sb1=sb2;
   sb1.append("wxn");
}

}
这是我的理解希望对你有帮助,我也是刚弄明白这个问题




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2