搞脑子的笔试题,想挑战的来吧

tianma630 2013-09-10 07:21:33
值传递问题,完善下面代码

public class SwapTest {

/**
* @param args
*/
public static void main(String[] args) {
int a = 3, b = 4;
swap(a,b);
System.out.println(a+","+b);
Integer a1 = new Integer(3);
Integer b1 = new Integer(4);
swap(a1,b1);
System.out.println(a1+","+b1);
}

// 交换a和b的值
public static void swap(int a, int b){

}
// 交换a和b的值
public static void swap(Integer a, Integer b){

}

}
...全文
366 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianma630 2013-09-11
  • 打赏
  • 举报
回复
引用 14 楼 Cecil_911 的回复:
画个圈圈诅咒你,我想想也是不可能
这是我真实当中碰到的笔试题啊,发给大家看看啊,说不定你们下次去面试的时候就碰到了
ceclinux 2013-09-11
  • 打赏
  • 举报
回复
画个圈圈诅咒你,我想想也是不可能
tianma630 2013-09-11
  • 打赏
  • 举报
回复
哈哈,大家都挺厉害的啊, 我做的时候就是被忽悠了 其实严格来说,2个都是无法实现的,要想真正的交换2个对象必须是交换两个对象在内存中的地址,但是java中是没有地址这个概念的--就是指针。知道c语言的同学应该能理解。 但是不那么严格的话,如果吧对象中的所有属性的值都交换一下,也算一种交换吧,但是integer没有方法可以更改value的值,所以开始我也以为不可以,现在看到5楼同学用反射实现了,也学习了
Iam_magicHu 2013-09-11
  • 打赏
  • 举报
回复
坐等楼主公布第一个方法的答案
gu390154333 2013-09-11
  • 打赏
  • 举报
回复
脑筋急转弯? 第一种除非用静态变量,否则就是搞笑。
ceclinux 2013-09-10
  • 打赏
  • 举报
回复
引用 5 楼 xxhhbb1538 的回复:
第二个通过反射是可以完成的

	public static void swap(Integer a, Integer b){
		Class clazz = Integer.class;
		try {
			int temp = a.intValue();
			Field field = clazz.getDeclaredField("value");
			field.setAccessible(true);
			field.set(a, b.intValue());
			field.set(b, temp);
			field.setAccessible(false);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
不过第一个感觉不太可能吧,楼主有没有答案啊,说说啊
反射是个好东西啊,长知识了,楼主有答案快说啊~。。。
2013-09-10
  • 打赏
  • 举报
回复
那些int ,char,如果把值传递给了一个方法,是不是就完成了他的任务,该方法的一切行为和他们无关了?
  • 打赏
  • 举报
回复
引用 7 楼 hjw506848887 的回复:
[quote=引用 5 楼 xxhhbb1538 的回复:] 第二个通过反射是可以完成的

	public static void swap(Integer a, Integer b){
		Class clazz = Integer.class;
		try {
			int temp = a.intValue();
			Field field = clazz.getDeclaredField("value");
			field.setAccessible(true);
			field.set(a, b.intValue());
			field.set(b, temp);
			field.setAccessible(false);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
不过第一个感觉不太可能吧,楼主有没有答案啊,说说啊
+1,第二个不可能,因为传进去的就是两个原生类型。。。。。[/quote]擦,说错了,是第一个不可能。。。。
  • 打赏
  • 举报
回复
引用 5 楼 xxhhbb1538 的回复:
第二个通过反射是可以完成的

	public static void swap(Integer a, Integer b){
		Class clazz = Integer.class;
		try {
			int temp = a.intValue();
			Field field = clazz.getDeclaredField("value");
			field.setAccessible(true);
			field.set(a, b.intValue());
			field.set(b, temp);
			field.setAccessible(false);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
不过第一个感觉不太可能吧,楼主有没有答案啊,说说啊
+1,第二个不可能,因为传进去的就是两个原生类型。。。。。
龙仔仔001 2013-09-10
  • 打赏
  • 举报
回复
java中不能按照楼主给的方法来实现!!
  • 打赏
  • 举报
回复
第二个通过反射是可以完成的

	public static void swap(Integer a, Integer b){
		Class clazz = Integer.class;
		try {
			int temp = a.intValue();
			Field field = clazz.getDeclaredField("value");
			field.setAccessible(true);
			field.set(a, b.intValue());
			field.set(b, temp);
			field.setAccessible(false);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
不过第一个感觉不太可能吧,楼主有没有答案啊,说说啊
白开水MD5 2013-09-10
  • 打赏
  • 举报
回复
懵了
深圳phper 2013-09-10
  • 打赏
  • 举报
回复
过来看看...
ceclinux 2013-09-10
  • 打赏
  • 举报
回复
我知道Integer是immutable的,做不像啊,坐楼等高手
  • 打赏
  • 举报
回复
第二个不难,第一个光在方法体内部能实现吗?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧