如何实现引用传递(50分)

  • 主题发起人 宁采臣
  • 开始时间

宁采臣

Unregistered / Unconfirmed
GUEST, unregistred user!
如何对java的基本类型实现引用传递
比如像basic里的swap(int a,int b)函数
 
创建一个基本类型的基本类吧,
比如 int a = 5;
int b = 6;
Integer a1 = new Integer(5);
Integer b1 = new Integer(5);
swap(Integer a, Integer b)
{
Integer c = new Integer(a.???());
a = b;
b = c;
}
或者自己写一个包含两个 int 的一个类, 其中一个方法就是交换,
呵呵, 有时候比较繁。
试一试, 我没法测验, 也许很多错误, 理解就行。
 
我试了,好像不行,不能改变
 
对不起, 是我想的, 没试过, 我回去看看.
 
宁采臣:请继续或结束问题讨论。
下面是我的看法:
在java中基本类型不属于对象,容纳了实际的值,而且并非指向一个对象的句柄,
所以在为其赋值的时候,是将一个地方的内容复制到另一个地方。
例如,假设为基本类型A和B使用“A=B”,那么B处的内容就复制到A。若接着又修改了A,
那么B根本不会受这种修改的影响。由于无法得到基本类型的指针,基本类型恐怕无法实现
传递引用。如果你实在要传递引用,建议使用基本类型相应的对象类型。
 
其实java在对象的复制方面做的还是可以的,
却不知道为什么不提供这样的函数。
既然为对象类型提供了clone方法,
也应该为基本类型提供像swap方法的。
????
 
继续,我来听听
 
package JC.RnD.Soft.TestBed.Reference;
public class Reference
{
class Pointer
{
Object ref = null;
public Pointer()
{
this((Object)null);
}
public Pointer(Object o)
{
ref = o;
}
public void setObj(Object o)
{
ref = o;
}
public Object getObj()
{
return ref;
}
}
public static void main(String[] args) throws Exception
{
new Reference().run(args);
System.in.read();
}
public void swap(Pointer a,Pointer b)
{
Object tmp = a.getObj();
a.setObj(b.getObj());
b.setObj(tmp);
}
public void run(String[] args)
{
Pointer pa = new Pointer(new Integer(10));
Pointer pb = new Pointer(new Integer(20));
System.out.println("Integer a is: "+pa.getObj()+" Integer b is: "+pb.getObj());
swap(pa,pb);
System.out.println("Integer a is: "+pa.getObj()+" Integer b is: "+pb.getObj());
}
}
结果:
Integer a is: 10 Integer b is: 20
Integer a is: 20 Integer b is: 10
对于基本类型,可以通过扩展Pointer类实现。例如,对于int,可以加入:
Pointer(int);
void setInt(int);
int getInt();
类中需要加一个成员用于判断类型。使用可以这样:
pIntA = new Pointer(10);
pIntB = new Pointer(20);
...
swap(pIntA,pIntB);
System.out.println(pIntA.getInt());
...
不过这个“Pointer”用起来太痛苦了。
 
宁采臣: 也说两句吧。
 
这个“引用”和C++中的“引用”差不多吧 ?
 
多人接受答案了。
 
顶部