请问一下这段程序为什么I=10,J=40..谢谢。。
public class t5 {
static int j=20;
public static void main(String[] args) {
int i=10;

t5 t=new t5();
t.method(i);
System.out.println(i);
System.out.println(j);
}
public void method(int x)
{
x=x*2;
j=j*2;
}}

解决方案 »

  1.   

    首先,java中传递的是值参数,所有I的值不变。
    j = j*2 ,因为J=20,所以J=40;
      

  2.   

    1. x = x * 2 , 方法调用以后,x是改变了,可是它得生命周期结束了,所以没有改变 i 的值。2. 因为 j 是静态变量,对每个类都一样。调用对象得方法得到j = j * 2;故而 j = 40;
      

  3.   

    t.method(i); 
    只是把i的值传给参数x,方法里面的x=x*2,改变的只是局部变量x的值,此时在这个method()方法加一个打印语句
    System.out.println(x);会输出你想要的20,i 的值是没有改变的!
    由于j 被声明为静态变量,是存在内存的数据区里,初始化为20,调用method()方法时,执行j=j*2;会修改j的值。
      

  4.   

    i是局部变量,而且是int型,在作为参数调用时,是传递一个新的数值过去,不会影响原始值,所以i=10;j 是一个类级别的静态变量,所以你的方法使其加倍,故 J=40;那个x是方法里面的局部变量,对系统没有任何影响的。我想下面这个更迷惑人吧!
    public   class   t5   { 
    static   int   j=20; 
    public   static   void   main(String[]   args)   { 
    int   i=10; t5   t=new   t5(); 
    t.method(i); 
    System.out.println(i); 
    System.out.println(j); 

    public   void   method(int   i)  // 这里也改成i 或者j

    i=i*2; 
    j=j*2; 
    } }