关于两数交换的问题
class(){ int a1;int a2;
A(int i,int j)
{a1=i;a2=j;}
}
使用sawp()方法交换A类的两个对象的成员变量的值.
但用到对象是引用传地址,请问怎么才能实现这个功能>
----------------解决方案--------------------------------------------------------
public void swap(int a1,int a2)
{
int temp = a1;
a1 = a2;
a2 = temp;
} 这就是交换算法
----------------解决方案--------------------------------------------------------
对于int值这样的数据,交换是没有用的,出了这个方法以后,a1还是以前的a1,a2还是以前的a2
----------------解决方案--------------------------------------------------------
为什么呢!怎么理解你的这句话!能举个例子说明下吗
----------------解决方案--------------------------------------------------------
public void swap(int a1,int a2)
{
int temp = a1;
a1 = a2;
a2 = temp;
}
int a=19;
int b=39;
swap(a,b);
System.out.println("a="+a);
Sysetm.out.println("b="+b);
你会发现ab的值依然没有变,
----------------解决方案--------------------------------------------------------
你的这个例子我一看就懂了!我知道是这样。。但我就是不知道原因。。还有那个。如果你传的是对象,那个值就会改变是不 。。。但我还是不知道原因。。是不是对象就好比是C++里的指针啊!好不就是把你的那个赋值的构造方法指向那个没有值的构造方法啊
----------------解决方案--------------------------------------------------------
如果是指针,那就可以改变其值了,问题是JAVA里面只有传值
当参数为基本数据类型是,传的是该数据的拷贝值
当参数为对象时,传的是该对象的引用的拷贝值
----------------解决方案--------------------------------------------------------
public class A {
public void swap() {
int temp = a;
a = b;
b = temp;
}
int a = 19;
int b = 39;
public static void main(String[] args) {
A g = new A();
g.swap();
System.out.println("a=" + g.a);
System.out.println("b=" + g.b);
}
}
结果:
a=39
b=19
LZ指的是这个意思吗?
----------------解决方案--------------------------------------------------------
LZ应该是想问如何传递基本数据类型的引用给函数吧?
java的基本数据类型传递都是传值,但是幸运的是,java为每一个数据类型都封装了一个类
你用Integer代替int就可以了
[此贴子已经被作者于2007-4-5 19:39:39编辑过]
----------------解决方案--------------------------------------------------------
刚刚看了下docs,发现Integer没有方法能够改变构造他的int数据,那不是等于Integer也不能够实现swap()?
----------------解决方案--------------------------------------------------------