问题是怎样用java写出一个类似c++这样的函数: void swap(int & a,int & b) { int temp = a; a = b; b = temp;}
public class Test{ static int x; static int y; static void swap(Test a){ int tmp = 0; tmp = a.x; a.x = a.y; a.y = tmp; } public static void main(String[] args){ Test a = new Test(); x=4; y=5; swap(a); System.out.println(x); System.out.println(y); } }
简单类型变量值不可改变,如 int double long ... Integer, Long, Double, String 等是final class,也不可变void swap(int a,int b) {...}这种函数在java中不能实现,不过可以采用如下方法: public class Swap { private int x, y; public Swap(int x, int y) { this.x = x; this.y = y; } public void doSwap() { int i = this.y; this.y = this.x; this.x = i; } public int getX() { return x;} public int getY() { return y;} public static void main(String[] args) { int x = 5; int y = 6; System.out.println("x=" + x); System.out.println("y=" + y); System.out.println("----------------"); Swap s = new Swap(x, y); s.doSwap(); x = s.getX(); y = s.getY(); System.out.println("x=" + x); System.out.println("y=" + y); }} result :x=5 y=6 ---------------- x=6 y=5
还是没有得到满意的答案! 不过还是谢谢各位 看到过以前的帖子说什么能内联展开的, 有人知道怎么展开吗? 就是说调用swap(a,b);相当于在调用处这样展开: int temp = a; a = b; b = a; 如果能这样的话,那么就能交换, 我提这个问题的一个主要目的还是为了交换两个对象, 例如: class T{} void swap(T a,T b) { T temp = a; a = b; b = temp; } 这样并不能交换两个对象,因为传递的是对象的引用的拷贝,而不是引用本身。而如果能在调用处内联展开的话,那就可以了。
不知道你想干什么 你为什么要交换2个对象, 你把对象的引用交换不就可以了, 为什么非要交换2个对象? void swap(T a,T b) { T temp = a; a = b; b = temp; } 这样, 你不是可以达到目的呀! 可能是我不知道你的需求呵呵
void swap(int & a,int & b)
{
int temp = a;
a = b;
b = temp;}
static int x;
static int y;
static void swap(Test a){
int tmp = 0;
tmp = a.x;
a.x = a.y;
a.y = tmp;
}
public static void main(String[] args){
Test a = new Test();
x=4;
y=5;
swap(a);
System.out.println(x);
System.out.println(y);
}
}
copy一下行不?
---------
不懂什么意思,添加中间变量转换不行么?
Integer, Long, Double, String 等是final class,也不可变void swap(int a,int b) {...}这种函数在java中不能实现,不过可以采用如下方法:
public class Swap {
private int x, y; public Swap(int x, int y) {
this.x = x;
this.y = y;
} public void doSwap() {
int i = this.y;
this.y = this.x;
this.x = i;
} public int getX() { return x;}
public int getY() { return y;} public static void main(String[] args) {
int x = 5;
int y = 6;
System.out.println("x=" + x);
System.out.println("y=" + y);
System.out.println("----------------");
Swap s = new Swap(x, y);
s.doSwap();
x = s.getX();
y = s.getY();
System.out.println("x=" + x);
System.out.println("y=" + y);
}}
result :x=5
y=6
----------------
x=6
y=5
或者这样也行啊:public Swap(int[] x) //x=new int[2],x[0]=a,x[1]=b
{
int a=x[0];
x[0]=x[1];
x[1]=a;
}
这样就把数组的两个成员交换了
看到过以前的帖子说什么能内联展开的, 有人知道怎么展开吗? 就是说调用swap(a,b);相当于在调用处这样展开:
int temp = a;
a = b;
b = a;
如果能这样的话,那么就能交换,
我提这个问题的一个主要目的还是为了交换两个对象,
例如:
class T{}
void swap(T a,T b)
{
T temp = a;
a = b;
b = temp;
}
这样并不能交换两个对象,因为传递的是对象的引用的拷贝,而不是引用本身。而如果能在调用处内联展开的话,那就可以了。
你为什么要交换2个对象, 你把对象的引用交换不就可以了, 为什么非要交换2个对象?
void swap(T a,T b)
{
T temp = a;
a = b;
b = temp;
}
这样, 你不是可以达到目的呀!
可能是我不知道你的需求呵呵