请问下面的输出结果是啥? 输出结果 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 c.append("B"); //会改变c所指向对象的值d=c; //d只是b的一份引用拷贝,此处赋值只会改变d,与b无关 结果是 AB,B StringBuffer c 和 StringBuffer a 是同一个内存空间 c.append("B"); 就是往空间里加入元素结果为 AB,B static void oper(StringBuffer c,StringBuffer d){ c.append("B"); // a = AB d=c; // b 的拷贝指向了a 的地址,和b 本身的指向已经没有关系了,b 依然是 B} 运行结果AB,B具体解释:调用函数oper(a,b),将c指向a所指向的地址,d指向b所指向的地址,执行c.append("B")语句,是将c所指向的地址所存储的值由原来的“A”变为"AB",而执行语句d=c,只是将d指向了c所指向的地址,并不影响b的指向,所以结果变为a=“AB”,b=“B” 此题关键就在于 oper(c,d) 方法,这个方法到底做了什么,怎么结果就和想的不一样呢?那么,就来看一下这个方法做了什么。我写了一段代码替代这个方法,如有不对的地方还望指出:package test;public class Jtest{ public static void main(String[] args) { StringBuffer a=new StringBuffer ("A"); StringBuffer b=new StringBuffer ("B"); //取代 oper(a,b) start; StringBuffer c; StringBuffer d; c = a; //c的地址指向了a,此时 c 的值为"A"; d = b; //d的地址指向了b,此时 d 的值为"A"; c.append("B"); //在c(a)的地址值变为 “AB” d=c; // d的地址指向了c,也就是指向了a,**关键就在这里了**,那么可以看到,这个过程中根本就没对b做任何操作, //就好像gg(d)路过一mm(b),说:这mm(b)不错,然后发现前面有个更有吸引力的mm(c),然后拿了一朵花("B")给mm(c(a))了,然后就见异思迁了,所以mm(b)压根就不知道什么情况,没参与 // so, b 还是b("B") , a已不是a("A"),二是a("AB") //取代 oper(a,b) end; System.out.print(a+","+b); } static void oper(StringBuffer c,StringBuffer d){ c.append("B"); d=c; //一开始的想法是这样的,c = a; d= b; 那么 c.append("B");后 c=“AB”,d=c = "AB",实际上并不是数学中的简单等价传递 }} 谢谢,我明白了,再问下,java中什么情况传值,什么情况下传址呢? public class TestMain { public static void main(String[] args) { // TODO Auto-generated method stub String s1 = "aaa"; String s2 = "bbb"; System.out.println(s1 + "," + s2); swap(s1, s2); System.out.println(s1 + "," + s2); } private static void swap(String x1, String x2) { String temp; temp = x1; x1 = x2; x2 = temp; }}这个和楼主那个貌似是一样的道理 谢谢,我明白了,再问下,java中什么情况传值,什么情况下传址呢?我也不大懂噢,但是如果是int类型的话,就是值传递,如果是 传递对象比如Collection 那么就是传址了,你搜一下,有很多博客写这个歌值传递和引用传递的 看看这个博客。http://blog.csdn.net/xiaohulunb/article/details/39036315 怎么无法调动WINDOW_DESTROY? 请教对byte的位运算 请问怎么在一个container里同一位置加入两个jpanel,然后通过setvisible显示? java线程的问题 jar 打包的问题 请教:关于四人帮写的《Design Pattern》的书怎样去读??? 迫切求助!!一个关于html的问题!! java.io.Serializable的问题 先谢了!恳请高人指点:如何迅速学习java,推荐好书或Web. 用Java代码执行maven命令 求助,windows下如何注入一个jar包到一个目标java进程 java 如何获取文本框某一行的内容?
c.append("B"); //会改变c所指向对象的值
d=c; //d只是b的一份引用拷贝,此处赋值只会改变d,与b无关
结果为 AB,B
static void oper(StringBuffer c,StringBuffer d){
c.append("B"); // a = AB
d=c; // b 的拷贝指向了a 的地址,和b 本身的指向已经没有关系了,b 依然是 B
}
具体解释:调用函数oper(a,b),将c指向a所指向的地址,d指向b所指向的地址,执行c.append("B")语句,是将c所指向的地址所存储的值由原来的“A”变为"AB",而执行语句d=c,只是将d指向了c所指向的地址,并不影响b的指向,所以结果变为a=“AB”,b=“B”
那么,就来看一下这个方法做了什么。我写了一段代码替代这个方法,如有不对的地方还望指出:package test;
public class Jtest{
public static void main(String[] args) {
StringBuffer a=new StringBuffer ("A");
StringBuffer b=new StringBuffer ("B");
//取代 oper(a,b) start;
StringBuffer c;
StringBuffer d;
c = a; //c的地址指向了a,此时 c 的值为"A";
d = b; //d的地址指向了b,此时 d 的值为"A";
c.append("B"); //在c(a)的地址值变为 “AB”
d=c; // d的地址指向了c,也就是指向了a,**关键就在这里了**,那么可以看到,这个过程中根本就没对b做任何操作,
//就好像gg(d)路过一mm(b),说:这mm(b)不错,然后发现前面有个更有吸引力的mm(c),然后拿了一朵花("B")给mm(c(a))了,然后就见异思迁了,所以mm(b)压根就不知道什么情况,没参与
// so, b 还是b("B") , a已不是a("A"),二是a("AB")
//取代 oper(a,b) end;
System.out.print(a+","+b);
}
static void oper(StringBuffer c,StringBuffer d){
c.append("B");
d=c;
//一开始的想法是这样的,c = a; d= b; 那么 c.append("B");后 c=“AB”,d=c = "AB",实际上并不是数学中的简单等价传递
}
}
谢谢,我明白了,再问下,java中什么情况传值,什么情况下传址呢?
// TODO Auto-generated method stub String s1 = "aaa";
String s2 = "bbb";
System.out.println(s1 + "," + s2);
swap(s1, s2);
System.out.println(s1 + "," + s2); } private static void swap(String x1, String x2) {
String temp;
temp = x1;
x1 = x2;
x2 = temp;
}
}
这个和楼主那个貌似是一样的道理
谢谢,我明白了,再问下,java中什么情况传值,什么情况下传址呢?我也不大懂噢,但是如果是int类型的话,就是值传递,如果是 传递对象比如Collection 那么就是传址了,你搜一下,有很多博客写这个歌值传递和引用传递的