解决方案 »
- 下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; 给点权威的答案!!!不知道 不要乱说
- 推荐几本java swing 好点的书籍
- 画一个有背景图片窗口,并可以添加按钮...高手帮忙!
- 【新手提问】这种错误不知道大家有没有遇到过..拿出来分享一下.
- 实在觉得奇怪的问题,不知道什么原因了,急问啊
- 关于swing的JFrame调用swt的shell的问题,请大家指教
- 谁来帮我看一下这个程序,很弱的问题(不要笑话我)
- import的时候提示,包 com.sun.java.Swing 不存在
- J2SE、J2EE、J2ME
- 求帮助
- 求助,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 那么就是传址了,你搜一下,有很多博客写这个歌值传递和引用传递的