黑马程序员技术交流社区

标题: String 和Stringbuild的这个问题不懂 [打印本页]

作者: Jarc    时间: 2016-9-23 13:51
标题: String 和Stringbuild的这个问题不懂
class  Test{
        public static void main(String[] args) {
                String s1 = "java";
                String s2 = "hello";
                method_1(s1,s2);
                System.out.println(s1+"...."+s2); //java....hello
               
                StringBuilder s11 = new StringBuilder("java");
                StringBuilder s22 = new StringBuilder("hello");
                method_2(s11,s22);
                System.out.println(s11+"-----"+s22); //javahello-----hello
        }
        public static void method_1(String s1,String s2){
                s1.replace('a','k');
                s1 = s2;
        }
        public static void method_2(StringBuilder s1,StringBuilder s2){
                s1.append(s2);
                s1 = s2;
        }
}
为什么输出不一样?都是引用类型的值传递啊?


作者: IceLoveInFire丶    时间: 2016-9-23 19:36
我认为在方法1中,对象调用replace 方法并不会对对象本身产生影响,然后s1 = s2 这个动作会把s1 指向 s2地址,但是在方法弹栈后就,指向就会消失,所以不会影响结果。
但是StringBuilder 的append 方法不同,使用它加入字符串会将参数追加到它本身后面,然后s1= s2这个赋值操作同上,会在方法弹栈后指向会消失。
仅个人观点,要是有大牛给更权威解释更OK

作者: 饭要大口吃    时间: 2016-9-28 18:43
{:2_30:}   不知道,共同学习一下。。




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