黑马程序员技术交流社区
标题:
两个数据交换错误
[打印本页]
作者:
沈样
时间:
2012-2-18 21:22
标题:
两个数据交换错误
本帖最后由 沈样 于 2012-3-3 15:35 编辑
package com.test;
/**
* 这是一个通过异或交换两个数据的程序
* a = a^b;
* b = a^b;
* a = a^b;
* 原理是一个数异或同一个数两次为自己*/
public class SawpTest {
public static void main(String[] args){
int a = 1;
int b = 10;
SawpTest.Swap(a,b);
System.out.println("a="+a+"b="+b);
}
public static void Swap(int a,int b){
a = a^b;
b = a^b;//a^b^b--a
a = a^b;//a^b^b^a^b--b
System.out.println("a="+a+"b="+b);
}
}
为什么方法运行后程序数据没有交换
作者:
左华清
时间:
2012-2-18 21:52
可试试,看看行不行
package cn.itcast.day1;
public class SwapDemo {
public static void main(String[]args){
int a=1;
int b=2;
swap(a,b);
swap2(a,b);
}
/**
* 通过中是变量交换两个数的值
* */
public static void swap(int a,int b){
int temp=0;
temp=a;
a=b;//将a赋值给b
b=temp;//通过中间变量将a赋值给b
System.out.println("swap():a="+a+",b="+b);
}
/**
* 通过算法交换两个数的值
* */
public static void swap2(int a,int b){
a=a+b;
b=a-b;
a=a-b;
System.out.println("swap2():a="+a+",b="+b);
}
}
作者:
黄秋
时间:
2012-2-19 01:01
1. java的基本数据类型,是值传递,String也是值传递。数组、集合、列表等高级类型,可看作引用传递,实际上传递的是:对象的地址。
2. 值传递的话,没法将两数交换,只有传地址(引用传递),才能两两交换。
下面是类对象的传递:
public class Test {
int a,b;
public static void main(String[] args) {
Test t=new Test();
t.a=1;
t.b=10;
Swap(t);
System.out.println("a="+t.a+" b="+t.b);
}
public static void Swap(Test t){
t.a = t.a^t.b;
t.b = t.a^t.b;//a^b^b--a
t.a = t.a^t.b;//a^b^b^a^b--b
System.out.println("a="+t.a+" b="+t.b);
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2