黑马程序员技术交流社区
标题:
一个小疑问...
[打印本页]
作者:
余银桂
时间:
2012-6-16 21:44
标题:
一个小疑问...
public class Test{
public static void main(String[] args){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);
}
public static void operate(StringBuffer x, StringBuffer y){
x.append(y); //这里被追加了 输出AB
y=x; //为什么这里没有改变 输出还是B
}
}
运行结果是 AB,B
复制代码
作者:
赵倩倩
时间:
2012-6-16 21:49
这个问题是由于引用引起的。
首先调用operate(StringBuffer x, StringBuffer y)方法的时候,这两个对象的引用被传递进去,
x.append(y); x 引用指向的对象 追加了 y引用指向的对象了, 这个在syso中也有了体现,对象改变了。
而y=x; 是将当前对象的引用指向了其他对象,与之前的对象也脱离了关系,所以不会造成原对象的改变。
要弄清对象和对象的引用的关系。
作者:
王晓新
时间:
2012-6-16 22:22
其实是有改变的,你可以在operate函数打印y看看。你的程序之所以输出的是AB B,因为当你的operate是void,没有返回值,所以当这个函数执行完后,内存就释放了y,所以打印就是原来B的值
public class Test
{
public static void main(String[] args)
{
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
StringBuffer aa=operate(a,b);
System.out.println(aa);
}
public static StringBuffer operate(StringBuffer x, StringBuffer y)
{
x.append(y); //这里被追加了 输出AB
y=x; //为什么这里没有改变 输出还是B
return y;
}
}
复制代码
作者:
王明明
时间:
2012-6-16 22:44
调用operate方法时,传入了两个引用a,b的拷贝x,y,这两个x,y都指向原a,b引用所指向的对象。x.append(y)对它指向的对象(即a指向的对象)进行了操作。而x=y,只是两个拷贝变量在赋值,并没有影响到原b所指向的对象。所以b所指向的对象仍然为B。
作者:
胡卿
时间:
2012-6-16 22:55
在这个过程中实际上是单个方法本身对注入的参数的值进行改变,并没有对注入的参数(对象本身)进行改变。所以在其他类方法调用该参数本身是,任然是初始值。在这里值得注意的是:应为StringBuffer()类中的append();insert();delete();reverse();replace()等方法,是可以对对象本进行修改和操作的...
作者:
胡大强
时间:
2012-6-16 22:57
本帖最后由 胡大强 于 2012-6-16 22:58 编辑
public class Test{
public static void main(String[] args){
StringBuffer a=new StringBuffer("A");
StringBuffer b=new StringBuffer("B");
operate(a,b);
System.out.println(a+","+b);
}
public static void operate(StringBuffer x, StringBuffer y){
x.append(y); //这里被追加了 输出AB
// y=x; //为什么这里没有改变 输出还是B
x=y; //输出还是B。。。说明什么呢?看下面的分析。。。。
}
}
//运行结果是 AB,B。。。。。。。。。java的调用是值调用。。。虽然java和C语法有异曲同工之妙,但是他们之间的调用却是不同的。。像c就属于引用调用。
//引用调用相当于传地址,它直接在原来的内存上写数据; 比如,x=1;x=x+1;后 x=2。
// 值调用是把原来的值在另外的内存上复制了一份,函数返回后复制的那一份将消失。x=1;x=x+1;后 这个则为x=1;
///希望对你有所帮助~!
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2