黑马程序员技术交流社区
标题:
引用类型问题
[打印本页]
作者:
王新年
时间:
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