西西河

主题:【调查】大家都主要用什么写程序? -- 还是不懂

共:💬139 🌺25
全看分页树展 · 主题 跟帖
家园 呜呜呜,老兄误会俺了

这个例子要说明的,当然不是swap函数能否实现这么简单。俺试图说明的是呢,Java里面也可以搞指针游戏的。原理就是利用Java的原子类型以外的Object,实际上也都是指针参照的原理。所以呢,只要绕过最外层的值参照,就可以恢复到C++时代的地址参照去咯。

数组就是这样的一个利用方法――数组里面存的,都是地址。所以在这个层面上交换,对外面就会有影响了;

其实,明白了这层道理,做出自定义的Class就可以在Java中同样轻易地实现地址参照或是多返回值函数的功能。比如下面这个程序,展示的就是任意类型的交换、同样利用的是地址参照的原理......

class type_a {
	Object type_a_value = null;
	public type_a(Object init) {
		this.set(init);
	}
	public void set(Object input) {
		this.type_a_value = input;
	}
	public Object get() {
		return this.type_a_value;
	}
	public String toString() {
		return this.type_a_value.toString();
	}
}
public class swap {
	public swap (type_a A, type_a B) {
		type_a C = new type_a(A.get());
		A.set(B.get());
		B.set(C.get());
	}
	static public void main(String[] argv) {
		type_a A1 = new type_a("String A");
		type_a A2 = new type_a("String B");
		System.out.println("A1="+A1);
		System.out.println("A2="+A2);
		swap SWAP = new swap(A1, A2);
		System.out.println("A1="+A1);
		System.out.println("A2="+A2);
	}
}	
全看分页树展 · 主题 跟帖


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河