当前位置:编程学习 > JAVA >>

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

值传递问题,完善下面代码

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){

}

}
java 值传递 --------------------编程问答-------------------- 第二个不难,第一个光在方法体内部能实现吗? --------------------编程问答-------------------- 我知道Integer是immutable的,做不像啊,坐楼等高手 --------------------编程问答-------------------- 过来看看... --------------------编程问答--------------------
懵了 --------------------编程问答-------------------- 第二个通过反射是可以完成的

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();
}
}


不过第一个感觉不太可能吧,楼主有没有答案啊,说说啊 --------------------编程问答-------------------- java中不能按照楼主给的方法来实现!! --------------------编程问答--------------------
引用 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,第二个不可能,因为传进去的就是两个原生类型。。。。。 --------------------编程问答--------------------
引用 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,第二个不可能,因为传进去的就是两个原生类型。。。。。
擦,说错了,是第一个不可能。。。。 --------------------编程问答-------------------- 那些int ,char,如果把值传递给了一个方法,是不是就完成了他的任务,该方法的一切行为和他们无关了?
--------------------编程问答--------------------
引用 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();
}
}


不过第一个感觉不太可能吧,楼主有没有答案啊,说说啊

反射是个好东西啊,长知识了,楼主有答案快说啊~。。。 --------------------编程问答-------------------- 脑筋急转弯?
第一种除非用静态变量,否则就是搞笑。 --------------------编程问答-------------------- 坐等楼主公布第一个方法的答案 --------------------编程问答-------------------- 哈哈,大家都挺厉害的啊, 我做的时候就是被忽悠了

其实严格来说,2个都是无法实现的,要想真正的交换2个对象必须是交换两个对象在内存中的地址,但是java中是没有地址这个概念的--就是指针。知道c语言的同学应该能理解。

但是不那么严格的话,如果吧对象中的所有属性的值都交换一下,也算一种交换吧,但是integer没有方法可以更改value的值,所以开始我也以为不可以,现在看到5楼同学用反射实现了,也学习了 --------------------编程问答-------------------- 画个圈圈诅咒你,我想想也是不可能 --------------------编程问答--------------------
引用 14 楼 Cecil_911 的回复:
画个圈圈诅咒你,我想想也是不可能
这是我真实当中碰到的笔试题啊,发给大家看看啊,说不定你们下次去面试的时候就碰到了
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,