Java基础面试题,改变其他方法的局部变量值。

图片说明

public static void main(String[] args) {
int a= 10;
int b= 10;
method(a,b);
System.out.println("a:"+a);
System.out.println("b:"+b);
}
写一个nethod方法,使main方法里面a打印出来的值为100,b为200.

哈哈,总结一下,这两种


public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        method(a,b);
        System.out.println("a="+a);
        System.out.println("b="+b);
    }

    public static void method(int a,int b){
        /**法1:
         * 
         */
        System.out.println("a="+a*a+",b="+2*b*b);
        System.exit(0);
        /**
         * 法2:
         */
        PrintStream Sys = new PrintStream(System.out){
            @Override
            public void println(String x) {
                if(x !=null){
                    if(x.startsWith("a")){
                        super.println(x+0);
                    }if(x.startsWith("b")){
                        super.println("b="+200);
                    }
                }else{
                    throw new NullPointerException();
                }
            }
        };
        System.setOut(Sys);
    }
}

这个是值传递,本能改变原来的值。这应该不能实现吧。沙发。。。

public class A{
int a;
int b;
}

public static void main(String[] args) {
int a= 10;
int b= 10;
A a = new A();
method(a);
System.out.println("a:"+a);
System.out.println("b:"+b);
}

private void method(A a){
a.a=100;
a.b=200;
}

值传递,基本数据类型改变不了成员变量的值

基本数据类型确实无法改动成员变量的值,但是试题上面并没有说是在main方法里面输出的内容。
所以可以这样写:

 public class Test {
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        method(a,b);
        System.out.print("a=" + a);
        System.out.print("b=" + b);
    }
    public static void method(int a,int b){
        System.out.print("a=100,b=200");
        System.exit(0);
    }
}


在method函数中直接输出其内容,然后结束程序就好了。

public static void method(int a,int b){
    System.out.println("a=100,b=200");
    System.exit(0);
}
原题没说必须改变值吧,而且也改不了

应该可以,但是要使用jni,method里面调用c或者c++,写一个c或者c++方法吧a,b的地址求出,通过地址直接修改值

这题应该只能是 类似脑筋急转弯的题目了,不能用常规写法。只能method方法中打印,然后退出。

重写println方法即可。如果采取打印再退出方法会有很大风险导致后面的程序不能继续执行了。
图片说明

“仅”字?难道考智商?
static void method(int a,int b){
System.out.println("a=100,b=200");
System.exit(0);
}

另外写一个静态方法,在新方法中改变一下成员变量的属性名并赋值就行了,在main函数中调用自定义静态方法,将属性名再变回来就行了

http://ask.csdn.net/questions/362442

刚好看到类似的题目,我做个总结好了。因为main方法也是方法,方法内的局部变量作用域只在括号内,超出{}外就失去了作用,如果想通过另外的方法去达到修改另一个方法内的局部变量,这个行为本身就违法了JAVA的设计初衷,因为你已经不想这个变量的作用域仅仅只设定在main方法内了(想把其当作一个引用传过去),JAVA的设计模式里想让任何两个方法都可以对一个变量进行赋值操作,那么就应该把这个局部变量设置为成员变量,即“单”作用域设置为局部变量,“多”作用域为全局变量。这道题的解决方法只能像其他答题者说的那样,重写prtint方法或者直接打印完停止JVM,直接调其他方法改main方法的值是行不通的。