一天,小明去一家IT公司应聘,面试官给他出了一个很简单的题目:
请分别用C++,C#和Java实现一个参数为原始类型的交换函数。
小明想了想,这还不简单,于是在草稿纸上画了起来:
首先是C++:
template<class T>
void swap(T* a,T* b)
{
T temp;
temp = *a;
*a = *b;
*b = temp;
}
然后是C#:
public void swap<T>(ref T a, ref T b)
{
T temp;
temp = a;
a = b;
b = temp;
}
最后是Java,等等,Java方法参数不是只支持值传递吗?因此,不可能在方法里改变原始类型变量的值的!!
没办法,只有写道:
无法在Java中实现该函数。
如果放宽界限,允许为引用类型。那么可以这样实现:
class Holder<T> {
public T value = null;
public Holder(T v) {
this.value = v;
}
}
public static <T> void swap(Holder<T> a, Holder<T> b) {
T temp = a.value;
a.value = b.value;
b.value = temp;
}
Over...