请教一下 Java 高手们,可以修改其它方法中的菊部便量么?

2019-01-09 13:16:12 +08:00
 xpresslink

请教一下 java 高手们,写出 method 方法使输出 a=400 b=500 , 如果 method 中不准许使用 print 能实现么?

public class Test {

public static void main(String[] args) {

   int a,b;


   a=4;


   b=5;


    method(a,b);


    System.out.println("a="+ a +" b=" + b);


   // a=400 b=500


} 

}

4464 次点击
所在节点    Java
30 条回复
lihongjie0209
2019-01-09 13:29:43 +08:00
少吃

锻炼括约肌
guoluwei
2019-01-09 13:36:52 +08:00
jackchao7432
2019-01-09 13:39:48 +08:00
引用传递
w4ngzhen
2019-01-09 13:46:19 +08:00
static void method(int a, int b) {
System.out.println("a = 400, b = 500");
System.exit(0);
}
w4ngzhen
2019-01-09 13:47:57 +08:00
皮了一下,没看到 method 不能用 print😂😂
xpresslink
2019-01-09 14:02:42 +08:00
@w4ngzhen 没关系。我现在也卡住了。😂
TtTtTtT
2019-01-09 14:03:28 +08:00
Java 不支持多返回值,也没有原生指针。

所以大概是没有法子了。。
ech0x
2019-01-09 14:05:14 +08:00
@lihongjie0209 #1 真的笑出声
amoia50
2019-01-09 14:08:17 +08:00
public class Test {

public static void main(String[] args) {

Integer a;
b;


a=4;


b=5;


method(a,b);


System.out.println("a="+ a +" b=" + b);


// a=400 b=500


}
}
amoia50
2019-01-09 14:12:02 +08:00
public class Test {

public static void main(String[] args) {

Integer a = 4;
Integer b = 5;

method(a,b);
System.out.println("a="+ a +" b=" + b);
}

public static void method(Integer a, Integer b){
a = 400;
b = 500;
}
}
xpresslink
2019-01-09 14:12:49 +08:00
@amoia50 这个简单用反射就可以了。我就想问 int
zhenjiachen
2019-01-09 14:14:25 +08:00
wxkvEX
2019-01-09 14:15:40 +08:00
如果 a 和 b 可以声明为 Integer 类型,那么 method 里 面用反射可以实现对值的修改。
基本类型束手无策,坐等大神演示,我觉得可能性很小。
另外楼上是来搞笑的么……
yukiww233
2019-01-09 14:17:00 +08:00
System.out.write("a = 400, b = 500\n".getBytes()); System.exit(0);
kaleidoscope
2019-01-09 14:17:21 +08:00
包装类的时候可以 不是的话不知道了。。
nycbdwss
2019-01-09 14:19:39 +08:00
@amoia50 method ()里面的 a 跟 b 是值又不是引用,怎么改都影响不了原来的 a 跟 b 吧
tearslee
2019-01-09 14:24:25 +08:00
java 的基本数据类型不能够引用传递
rizon
2019-01-09 14:31:30 +08:00
最常用的就是数组了

```java
int[] a=[5];
int[] b=[6];

void method(int[] a,int[] b){
a[0]=6;
b[0]=5;
}
print(a,b);

```
amoia50
2019-01-09 14:31:58 +08:00
@nycbdwss 自己想的太简单了,哈哈
Raymon111111
2019-01-09 14:35:21 +08:00
因为 method 和 main 还同属一个线程(thread)
1. 理论上应该是可以在当前线程拿到栈信息(stack) --- 但是怎么做?

2. 回推 a 和 b 在哪 --- 但是怎么做??

3. 然后用某种 native 的方法(类似 unsafe) 修改值 --- 但是怎么做???

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/525344

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX