解决方案 »

  1.   

    t.x是t这个引用对对应的对象里面的x这个变量,而t是个引用,它代表的是一个实例化后的对象,传t.x会调用参数里面是int的方法,而传t则会调用参数是对象的方法。
    这也太基础了。
      

  2.   

    我也是看了两页基础的小白运行了一下,传t.x,则打印1传t则打印3根据楼上大侠所说,传 t.x ,会传给参数类型是int的方法(貌似这就叫多态是吧)但是实际传t.x,结果还是1,why ?谢谢!
      

  3.   

    --当参数为t.x时,程序调用show(int x)方法,调用这个方法的原因不用解释了吧,在这个方法里面你x=4只是将方法的参数x做了新的赋值并没有对t这个对象里的x重新赋值;所以结果仍是1
    --当参数为t的时候,程序调用show(TestJava t),你传进去的是当前类的一个实例对象,在这个方法里面你重新给这个对象也就是t.x赋值,那么针对改对象t的x值在内存中就有了新的值,所以结果是3最后 你如果重新new一个对象,打印x值,结果仍然是1
    希望能帮到你
      

  4.   

    t传递的是内存使用权t.x传递的并不是内存地址,x != t.x对吧?
      

  5.   


    传t.x调用的是show(int x)这个方法,传进去的参数是x,x是1,虽说已经执行了x=4,但是,类变量那个int x=1并没有变,变的只是show(int x)这个x,因为这个方法是静态的,类还没有new的时候就已经加载了,但你的类变量不是静态的,new之前并没有加载,所以当你new了之后x还是1,就算你后面调用了那个方法,除非你这个方法不是静态的,否则他不会改变类变量x的值,所以还是1,而调用第二个方法你传的是个对象,这个对象已经new了,所以他会改变对象里面的类变量x的值,所以输出就是3了
      

  6.   

    传t.x调用的是show(int x)这个方法,传进去的参数是x,x是1,虽说已经执行了x=4,但是,类变量那个int x=1并没有变,变的只是show(int x)这个x,因为这个方法是静态的,类还没有new的时候就已经加载了,但你的类变量不是静态的,new之前并没有加载,所以当你new了之后x还是1,就算你后面调用了那个方法,除非你这个方法不是静态的,否则他不会改变类变量x的值,所以还是1,而调用第二个方法你传的是个对象,这个对象已经new了,所以他会改变对象里面的类变量x的值,所以输出就是3了
    写错了点,就算类变量是静态的,执行第一个方法也不会改变
      

  7.   


    t传递的是内存使用权t.x传递的并不是内存地址,x != t.x对吧?
    没听明白你说的意思。
      

  8.   

    这个不是值类型与引用类型的问题吗?? 你传个t.x时相当于是传入一个int类型,int类型是个值类型,只传入了值给你方法中的x,而不是t的x,所以 你打印的t.x是没有变化的
      

  9.   

    public static void show(int x) { 
            x = 4;
        }
        public static void show(TestJava t) {
            t.x = 3;
        }
    第一个只是值传递,不是参数传递,也就是说传递的是x=4中的这个4,而不是x这个参数,而方法体内的x可以说和外部的x没有任何关系,而且 x = 4这个只是修改局部变量(也就是方法头中定义的变量),并非全局变量x,两则只是定义的名称相同,具有一定的迷惑性。
    第二个是对象传递,就是本身参数的传递赋值。
      

  10.   

    类的多态问题,一个实参是基本类型,一个是类对象,int x 不是局部(本地)变量,是全局变量。
      

  11.   

    调用show(t.x)时,方法修改的是方法的参数,是一个局部变量,不是对象的成员变量
    而调用show(t)时修改的是t的成员变量的值
      

  12.   

    传t.x时,改的对象与现在NEW出来的t不是同一样,所以还是1.
      

  13.   

     public static void show(int x) { 
            x = 4;
        }该x只是方法中的局部,与类中的成员变量x是两码事。该方法的参数名称可以改为任意名称。
      

  14.   

    首先注意X为 实例变量,不共享内存。其次show方法涉及多态,一个传int型(变量)一个传TextJava型(对象),传的为into型不改变实例变量值,传对象时会改变,这就是问题的关键
      

  15.   

    此题考查的是值和类型的传值问题,
    但是出这个题目的人绝对煞笔
    请问 有在方法内使用和全局变量一样的吗你在类中定义了x
    那么你在show方法中可以使用y等,这不是混淆吗?
    不要说没有经验的 即使有经验的 也会在如此定义中认识出错,给以后的调试程序非常不便利
    所以 出题们的人纯属煞笔
      

  16.   

    传t ,jvm会调用public static void show(TestJava t) 此方法,传t.x ,JVM会调用public static void show(int x) 此方法,这么简单的问题还用问?
      

  17.   

    public class TestJava1 {
        int m_x = 1;    public static void main(String[] args) {
            TestJava1 t = new TestJava1();
            show(t.m_x);//将参数改为t,为何输出结果不同?
            System.out.print(t.m_x);//如果将上一行改为show(t),输出结果为何不同?
        }    public static void show(int p_x) {
            System.out.println("show(int p_x):Start");
            p_x = 4;
            System.out.println("show(int p_x):End");
        }    public static void show(TestJava1 t) {
            System.out.println("show(TestJava1 t):Start");
            t.m_x = 3;
            System.out.println("show(TestJava1 t):End");
        }
    }show(int p_x):Start
    show(int p_x):End
    1
      

  18.   

    public class TestJava3 {
        int m_x = 1;    public static void main(String[] args) {
            TestJava3 t = new TestJava3();
            show(t);//将参数改为t,为何输出结果不同?
            System.out.print(t.m_x);//如果将上一行改为show(t),输出结果为何不同?
        }    public static void show(int p_x) {
            System.out.println("show(int p_x):Start");
            p_x = 4;
            System.out.println("show(int p_x):End");
        }    public static void show(TestJava3 t) {
            System.out.println("show(TestJava1 t):Start");
            t.m_x = 3;
            System.out.println("show(TestJava1 t):End");
        }
    }show(TestJava1 t):Start
    show(TestJava1 t):End
    3
      

  19.   

    【说明】
    方法重载 : 是让类以统一的方式处理不同类型数据的一种手段。【方法名相同,参数类型不同】#25的第6行,show(t.m_x);在调用时,参数类型是基本类型int,所以根据log走的是show(int p_x)
    #26的第6行,show(t)在调用时,参数类型是类TestJava3,所以根据log走的是show(TestJava3 t)【补充】
    为了便于理解,代码的变量名称进行了微调
    类的成员变量,加上了m_代表member
    方法的参数,加上了p_代表parameter
    由于要同时输出两种结果,以便于比较,把类的名字根据输出结果进行了调整,分别加上了1和3
    另外额外加上了一些输出log的处理,以使得回答更有说服力一些