利用异或(a^b)^b 等于a,进行交互,不需要设置临时变量也不会超范围。代码如下:
import java.util.Scanner
public class woo {
public static void main(String args[]) {
Scanner scan =new Scanner(System.in)
System.out.println("输入两个数a, b")
int a = scan.nextByte()
int b = scan.nextByte()
System.out.printf("交换前:a = %d, b = %d\n", a, b)
a = a^b
b = a^b
a = a^b
System.out.printf("交换后:a = %d, b = %d", a, b)
}
}
扩展资料:
值传递就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来实参。
引用传递是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。
在java中只有一种传递方式,那就是值传递.可能比较让人迷惑的就是java中的对象传递时,对形参的改变依然会意向到该对象的内容。
参考资料:
百度百科——参数传递
Java 方法的参数是简单类型的时候,是按值传递的 (pass by value),所以Java里面不能实现和C中一样的swap方法来交换两个数的值。非要用的话只能这样写:
//交换数组data中的第a和第b个元素public static void swap(int[] data, int a, int b) {
int t = data[a]
data[a] = data[b]
data[b] = t
}
估计不是你想要的效果。
关于Java中参数和引用的问题建议看看下面的博文:
http://blog.csdn.net/zw_2011/article/details/6431448
基本类型无法按引用传递,详见『ヤ搁[浅灬メ』的解释,我只提供一种实现方案,一定要用函数调用来实现的话,可以传个数组过去import java.io.*
public class Compare
{
public static void change(int[] a) throws Exception
{
int temp=0
temp=a[0]a[0]=a[1]a[1]=temp
}
public static void main(String args[]) throws Exception
{
int[] a = new int[2]
System.out.println("输入a:")
InputStreamReader inreader=new InputStreamReader(System.in)
BufferedReader breader=new BufferedReader(inreader)
a[0]=Integer.parseInt(breader.readLine())
System.out.println("输入b:")
a[1]=Integer.parseInt(breader.readLine())
System.out.println("交换前a="+a[0]+" 交换前b="+a[1])
change(a)
System.out.println("交换后a="+a[0]+" 交换后b="+a[1])
}
}