黑马程序员技术交流社区
标题: 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 |