java本身就是按引用调用的做法,但是像你上面的用一个函数来实现exchange的做法,在java里面是不行的,因为java里函数参数的传递是通过copy出一个新的参数类型的对象在stack上,你在函数里对参数的操作,是对新生成的对象引用进行操作。
其实,在java 里要实现两个对象值之间的互换,那实在是方法太多了,我这里提供一个思路,你可以将两个对象之间的值交换封装成一个类,(记住,java是完全面向对象的)如下所示:
class Exchange
{
Object first;
Object second;
public Exchange(Object first,Object second)
{
//这里可以对参数类型进行一些判断,比如需要两个参数类名一致等等 this.first=first;
this.second=second;
} public void exchange()
{
Object tmp=this.first;
this.first=this.second;
this.second=tmp;
} public static void main(String[] args)
{
Exchange testexchange=new Exchange("aaaaaa","bbbbbb");
testexchange.exchange();
System.out.println("first:"+testexchange.first+";second:"+testexchange.second);
}
}
其实,在java 里要实现两个对象值之间的互换,那实在是方法太多了,我这里提供一个思路,你可以将两个对象之间的值交换封装成一个类,(记住,java是完全面向对象的)如下所示:
class Exchange
{
Object first;
Object second;
public Exchange(Object first,Object second)
{
//这里可以对参数类型进行一些判断,比如需要两个参数类名一致等等 this.first=first;
this.second=second;
} public void exchange()
{
Object tmp=this.first;
this.first=this.second;
this.second=tmp;
} public static void main(String[] args)
{
Exchange testexchange=new Exchange("aaaaaa","bbbbbb");
testexchange.exchange();
System.out.println("first:"+testexchange.first+";second:"+testexchange.second);
}
}
解决方案 »
- 大侠们,帮我深思下,++i和i++的区别
- java 把TextField内容通过按钮事件储存到文本文件中
- 急,球面多边形面积
- hibernate 中session(类名.Class,new Integer(1))
- 为什么总是删除Vector的第二个元素呢?
- 高分求教eclipse的图形插件中是否有 类似于数据窗口的插件(急,大家帮忙!!!)
- JAVA的RESULTSET中如何判断一条记录的一字段的值为NULL?
- 一菜鸟问题:Jdeveloper怎么加上参数(main里的args[ ])运行或调试??
- 我对Java总有点疑问,总感觉他好像是一个寄生性的语言,因为他必须完全依靠在其他系统里安装的JVM中才能运行,是这样的吗?
- out.println("你好")怎么解决汉字问题?
- 关于前后台连接问题
- 为什么啊????
我上面所举的例子正是为了避免参数传递,而是将他们封装到了一个类里面,因为参数传递是按值传递的(也就是copy出对象的一个副本,再在这些副本上进行操作),我得类封装的方法采用了java里的一般常用的按引用传递的做法,也就是this.first=this.second;这些只是在传递它们之间的引用而已,避免了值传递的副本问题。