搞脑子的笔试题,想挑战的来吧
值传递问题,完善下面代码java 值传递 --------------------编程问答-------------------- 第二个不难,第一个光在方法体内部能实现吗? --------------------编程问答-------------------- 我知道Integer是immutable的,做不像啊,坐楼等高手 --------------------编程问答-------------------- 过来看看... --------------------编程问答--------------------
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){
}
}
懵了 --------------------编程问答-------------------- 第二个通过反射是可以完成的
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中不能按照楼主给的方法来实现!! --------------------编程问答-------------------- +1,第二个不可能,因为传进去的就是两个原生类型。。。。。 --------------------编程问答-------------------- 擦,说错了,是第一个不可能。。。。 --------------------编程问答-------------------- 那些int ,char,如果把值传递给了一个方法,是不是就完成了他的任务,该方法的一切行为和他们无关了?
--------------------编程问答--------------------
第二个通过反射是可以完成的
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楼同学用反射实现了,也学习了 --------------------编程问答-------------------- 画个圈圈诅咒你,我想想也是不可能 --------------------编程问答--------------------
画个圈圈诅咒你,我想想也是不可能
补充:Java , Java SE