java中是值传递,对于基本数据类型来说是传值的,对于自定义的数据类型或应用数据类型是传递引用的。你的DATA类属于传引用。而引用传递则传进来的是该对象的一个别名,即引用该对象在虚拟机中的“地址”,因此引用传递会对该“地址”的内部属性产生影响,而不会改变该“地址”在虚拟机中的位置,即引用传递在外部看来是没有发生过任何变话的,但从内部看来,它的属性会随着调用它的方法的改变而改变。因此你的交换方法不好使。
建议这样修改
public static void swap(Date x, Date y) {
Date temp =null;
tempsetYear(xyear);
tempsetMonth(xmonth);
tempsetDay(xday);
xsetYear(yyear);
xsetMonth(ymonth);
xsetDay(yday);
ysetYear(tempyear);
ysetMonth(tempmonth);
ysetDay(tempday);
}
int i = 0; int k = 0;
public void swap(int i,int k){
thisi=k;
thisk=i;
Systemoutprintln(thisi+"-"+thisk);
}
基本类型值的交换与C一样。比如:
int tmp = a;
a = b;
b = tmp;
引用值的交换业和上面类似,这又叫做浅拷贝。比如:
Object tmp = a;
a = b;
b = tmp;
如果要将类中的所有成员都复制,需要深拷贝。比如:
Object tmp = aclone();
a = (Object)bclone();
b = (Object)tmpclone();
这里方法clone由用户自定义。
public static void main(String[] args) throws Exception {
int num1 = 33;
int num2 = 22;
Systemoutprintln("交换前:num1: " + num1 + ", num2: " + num2);
// 交换
int temp = num1;
num1 = num2;
num2 = temp;
Systemoutprintln("交换后:num1: " + num1 + ", num2: " + num2);
}
你change方法中改变只是该方法中的 a、b
public class TestChange {
private static int a=0;
private static int b=0;
/
@param args
/
public static void main(String[] args) {
// TODO Auto-generated method stub
a=9;
b=1;
change(int a,int b);
Systemoutprintln(a);
Systemoutprintln(b);
}
public static void change()
{
int c=0;
c=a;
a=b;
b=c;
}
以上就是关于Java中实现类交换的方法全部的内容,包括:Java中实现类交换的方法、在java中,通过调用方法实现对两个数进行交换。(写出代码)、在 Java 应用程序中如何编写一个方法来交换两个基本类型的值或两个对象引用的值呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)