java 难题 求大神进来看看

public static void main(String[] arg){
    int i = 10;
    int o = 20;
    func(i, o);

    System.out.print("i->"+i+",o->"+o);
}

private static void func(int i, int o){
    ...
}

如何答案等于 i->20,o->10 只能在func中填代码

int k=0;
k=i;
i=o;
o=k;

图片说明

int i=10; int o=20;的意思是开辟了两块新的内存用于存放这两个数据;
所以
private static void func(int i , int o){
//在被前方法调用的时候 i 和 o 的内存地址是不会变的;
int x = i ; //开辟一块新内存用于存放i的值
i = o ; //内存i的值变成 o
o = x ; //内存o的值变成了x (而x的值为i)
//至此,o和i的值就相互转化了
}

i = i + o;
o = i - o;
i = i - o;

理解好java的参数传递是值传递,基本类型的值就是本身,复制了一个传过去。引用类型传递了引用地址。理解了这些基本概念,不是难题

Java里函数的参数只能传值,传递参数时,会对参数做一份拷贝,函数内实际上是对拷贝的操作,对原值不会产生任何影响,所以通过参数是无法输出想要的内容的,
而题目里 返回值也被定为void类型,所以通过返回值修改 i o的值的路也行不通,这题要么如楼上所写的投机方式,要么就无解。

来个和tom_tom_tom_xiang 类似的取巧
func(int i,int c){
system.println.out("c+","+i);
Thread.currentThread().stop();
}