A a; A b; swap(a, b); 为什么不能实现交换? 不是非基本数据类型不是传值吗?
如题
问题点数:50、回复次数:10Top
1 楼725137(2006年不会菜)回复于 2006-03-01 19:56:37 得分 10
楼主的表达能力..
哎.....Top
2 楼sonyejin(Neverwinter Nights 2)回复于 2006-03-01 19:59:44 得分 0
看不懂看不懂看不懂!!!Top
3 楼yuzl32(有酒醉)回复于 2006-03-01 20:00:00 得分 15
传地址(引用)也是靠地址值传递的Top
4 楼yuzl32(有酒醉)回复于 2006-03-01 20:03:39 得分 0
你这个问题可以这样描述:
char *a = "aaa";
char *b = "bbb";
swap(a,b); // 只是传值,所以根本没有交换内容
// 交换函数
void swap(char *a ,char *b)
{
char *temp = a;
a = b;
b = temp;
}Top
5 楼husl(胡少磊)回复于 2006-03-01 20:03:47 得分 0
class A
{
}
void swap(A x, A y)
{
A temp = new A();
temp = x;
x = y;
y = temp;
}
A a;
B b;
swap(a, b);
为什么这样a,b 没能实现交换?
传地址(引用)也是靠地址值传递的 ---------- 就是这一句, 不懂
能就例子具体解释下吗?
Top
6 楼yuzl32(有酒醉)回复于 2006-03-01 20:24:52 得分 0
上面的例子已经说明,你再看看.Top
7 楼yuzl32(有酒醉)回复于 2006-03-01 20:26:36 得分 0
所谓传引用,其实就是把地址传进去.而这个地址也是要靠值传递的.Top
8 楼sonyejin(Neverwinter Nights 2)回复于 2006-03-01 20:36:41 得分 10
楼主的意思应该想把a b都定义成A类的引用把:
A a = new A();
A b = new A();
这样的话调用了swap方法后,a和b所指向的A类对象并没有改变,也就是说还是指向了初始化时在内存里分配的那块地址空间,所以谈不上什么交换Top
9 楼doway(john)回复于 2006-03-01 23:03:09 得分 10
JAVA 中只有传值调用。
当调用一个方法时,真正传递到被调用方法中的参数并不是调用方法中变量,这中间需要经过一次复制,被调用方法中实际得到的参数只是调用方法中的变量的一份拷贝。
因此 swap(a, b) 就达不到其目的。
Top
10 楼treeroot(旗鲁特)回复于 2006-03-02 09:08:04 得分 5
正因为只传值,所以才不能交换
问题本身就有问题!Top




