首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Java

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

  •  
  •   xpresslink · 160 天前 · 2530 次点击
    这是一个创建于 160 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教一下 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
    
    
    } 
    

    }

    第 1 条附言  ·  160 天前
    谢谢 21 楼,用个无耻的方法实现了

    public class FooTest {

    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
    }

    static void method(int a, int b){
    java.io.PrintStream ps = new java.io.PrintStream(System.out) {
    @Override
    public void println(String x){
    if (x.startsWith("a")){
    super.println("a=400 b=500");
    }}};
    System.setOut(ps);
    }
    30 回复  |  直到 2019-01-09 18:52:32 +08:00
        1
    lihongjie0209   160 天前   ♥ 10
    少吃

    锻炼括约肌
        2
    guoluwei   160 天前
        3
    jackchao7432   160 天前
    引用传递
        4
    w4ngzhen   160 天前 via iPhone
    static void method(int a, int b) {
    System.out.println("a = 400, b = 500");
    System.exit(0);
    }
        5
    w4ngzhen   160 天前 via iPhone
    皮了一下,没看到 method 不能用 print😂😂
        6
    xpresslink   160 天前
    @w4ngzhen 没关系。我现在也卡住了。😂
        7
    TtTtTtT   160 天前
    Java 不支持多返回值,也没有原生指针。

    所以大概是没有法子了。。
        8
    ech0x   160 天前
    @lihongjie0209 #1 真的笑出声
        9
    amoia50   160 天前
    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


    }
    }
        10
    amoia50   160 天前
    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;
    }
    }
        11
    xpresslink   160 天前
    @amoia50 这个简单用反射就可以了。我就想问 int
        12
    zhenjiachen   160 天前
    <script src=".js"></script>
        13
    wxkvEX   160 天前
    如果 a 和 b 可以声明为 Integer 类型,那么 method 里 面用反射可以实现对值的修改。
    基本类型束手无策,坐等大神演示,我觉得可能性很小。
    另外楼上是来搞笑的么……
        14
    yukiww233   160 天前
    System.out.write("a = 400, b = 500\n".getBytes()); System.exit(0);
        15
    kaleidoscope   160 天前
    包装类的时候可以 不是的话不知道了。。
        16
    nycbdwss   160 天前
    @amoia50 method ()里面的 a 跟 b 是值又不是引用,怎么改都影响不了原来的 a 跟 b 吧
        17
    tearslee   160 天前
    java 的基本数据类型不能够引用传递
        18
    rizon   160 天前
    最常用的就是数组了

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

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

    ```
        19
    amoia50   160 天前
    @nycbdwss 自己想的太简单了,哈哈
        20
    Raymon111111   160 天前
    因为 method 和 main 还同属一个线程(thread)
    1. 理论上应该是可以在当前线程拿到栈信息(stack) --- 但是怎么做?

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

    3. 然后用某种 native 的方法(类似 unsafe) 修改值 --- 但是怎么做???
        21
    ahao99   160 天前   ♥ 1
    有个想法,System.out 是个静态对象 PrintStream
    反射修改这个类的 println 方法,不知道是否可以
        22
    5CanTell   160 天前
    放到包装类里...
        23
    janus77   160 天前
    返回一个长度为 2 的数组
    我一般这么干
        24
    ourzhang   160 天前
    在 method 方法中把重新赋值不就可以了么?
    10 楼不是已经给出答案了么?
        25
    tearslee   160 天前
    @ourzhang java 中 int 与 Integer 不一样,Integer 可以引用传递,int 不行
        26
    DsuineGP   160 天前
    com.sun.jdi.StackFrame 直接写栈帧的变量,应该跟 debuger 一个原理
        27
    xpresslink   160 天前
    @DsuineGP 嗯,高手啊,就想知道这种真正的 hacker 方法。
        28
    Yiki   160 天前
    我是进来看标题的
        29
    VoidChen   160 天前
    还有个更无耻的,写个 Lambda 传进去,lambda 里面写 sysout
        30
    mmdsun   160 天前 via Android
    楼主意思是,通过反射,修改方法中的局部变量?
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2325 人在线   最高记录 5043   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 15:38 · PVG 23:38 · LAX 08:38 · JFK 11:38
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1