小弟现在想交换两个数,本以为会应该很简单的,这下可麻烦了,于是小弟写了个测试类.
代码如下:public class Swap
{
public static void main(String[] args)
{
//SwapTest st=SwapTest(2,3); 不能这样写,因为2,3为基本数据类型int型的,而非对象Integer型
Integer a=new Integer(2);
Integer b=new Integer(3);
SwapTest st=new SwapTest(a,b);
System.out.println("before swap:");
st.outPut();
st.dataSwap(a,b);
System.out.println("after swap:");
st.outPut();
}
}class SwapTest
{
Integer a=null;
Integer b=null;
public SwapTest(Integer a,Integer b)
{
this.a=a;
this.b=b;
}
protected void dataSwap(Integer a,Integer b)
{
Integer temp=a;
a=b;
b=temp;
}
protected void outPut()
{
System.out.println("a="+a+" b="+b);
}
}问下,上面的程序出错在哪里,......我知道值传递是实现不了的,只能用引用传递,我上面的程序不是引用传递吗?...好像是啊..
代码如下:public class Swap
{
public static void main(String[] args)
{
//SwapTest st=SwapTest(2,3); 不能这样写,因为2,3为基本数据类型int型的,而非对象Integer型
Integer a=new Integer(2);
Integer b=new Integer(3);
SwapTest st=new SwapTest(a,b);
System.out.println("before swap:");
st.outPut();
st.dataSwap(a,b);
System.out.println("after swap:");
st.outPut();
}
}class SwapTest
{
Integer a=null;
Integer b=null;
public SwapTest(Integer a,Integer b)
{
this.a=a;
this.b=b;
}
protected void dataSwap(Integer a,Integer b)
{
Integer temp=a;
a=b;
b=temp;
}
protected void outPut()
{
System.out.println("a="+a+" b="+b);
}
}问下,上面的程序出错在哪里,......我知道值传递是实现不了的,只能用引用传递,我上面的程序不是引用传递吗?...好像是啊..
解决方案 »
- windows下cmd命令配置java环境变量
- JXL 如何创建数值型的excel表格!!
- 一个java程序简单的不能再简单的东西了。还是出错。请指教。
- 请问tomcat中的路径问题,如何让链接有效?
- 求助(下面程序中的数字是什么意思)
- 制作WEB报表,是java好还是.net好?
- 用java写的ftp下载程序中遇到的问题
- 我的together很多功能、属性不能修改,为什么?
- 15分买一判断呀!
- 求高手点拨一个Java Socket通信编程中的java.net.SocketException: Connection reset错误的调试方法。
- UDP怎么实现双方通讯
- 如何在jar文件里读取外部配置文件
//每天都有这样的帖子...protected void dataSwap(Integer a,Integer b)//拷贝2个引用a,b
{
// 总结来说,你传进来之后,开始是拷贝的和被拷贝的指向同一个对象,但是你在下面把这个拷贝的引用指向了另一个,这时候它跟被拷贝的引用之间没什么关系了,你爱改怎么改就怎么改!
Integer temp=a;//和temp都指向同一个对象
a=b;//把a指向b指向的对象,现在指向同一个对象
b=temp;//...
}
{
this.a=n;
this.b=m;
}
{
Integer temp=a;
a=b;
b=temp;
}
你交换的是dataSwap函数里的参数a,b,而你的outPut输出的是SwapTest的属性a,b
这样改:
protected void dataSwap()
{
Integer temp=this.a;
this.a=this.b;
this.b=temp;
}
那也不行的,你的意思不就是把我的main函数里的a,b改下就行了吗,..不信你改成c,d..测试下,是也不可以的~!
最喜欢你的回答....分 give you~!
protected void dataSwap(Integer a,Integer b)//这里a和b,你的成员变量也是a,b!还不明白?
{
Integer temp=a;
a=b;
b=temp;
}
int a = 100;
int b = 200;
System.out.println("a = " + a + ", b = " + b);
SwapTest st = new SwapTest();
st.dataSwap(a, b);
st.print();
}
}class SwapTest {
private int a;
private int b; public void dataSwap(int a, int b) {
this.a = b;
this.b = a;
} public void print() {
System.out.println("a = " + a + ", b = " + b);
}
}