输出结果是a
这是因为java中传递的是变量的值,而不是变量的指针,所以你将传入的对象变量设置为null,是不会影响到外部变量的指向的.

解决方案 »

  1.   

    楼上的应该是错了。
    java传递的是引用和值。
    Test是引用类型,传递的是引用。
    我的理解是这样的。test t = new test();
    变量t指向Test实例。
    t--->test实例。
    t.change(t),在方法内ss变量也指向t。
    变成t--->test实例<----ss
    方法执行ss=null;是将ss指为空。
    变成t-->test实例,ss为空。
    很容易验证。如果照楼上的说。
    我们把ss=null;改成ss.s="b";同样不会改变。但实际上会打印 a  b.因为
    t.change(t),在方法内ss变量也指向t。
    变成t--->test实例<----ss
    ss.s与t.s是指向同一个地址的。
    关键是指向 = 与 . 操作的不同。
      

  2.   

    输出结果是a  a
    理由同haichuang(不戒和尚)
      

  3.   

    同意jgo(航海家),对象传递的是引用
      

  4.   

    输出结果是a a
    这是因为java中传递的是变量的值,而不是变量的指针,所以你将传入的对象变量设置为null,是不会影响到外部变量的指向的.
      

  5.   

    在JAVA中,作为参数传递是如果是基本类型则是值传递
    如果是类类型则是传递引用
    传递后两个引用都应用同一个对象,这时候如果只是将其中一个引用指向另一个对象,则对另一个引用不产生影响
    而如果对其中一个引用做改变,则两个引用都将改变在上边的例子中正是将引用指向了另一个对象(NULL),所以另一个引用不受影响
    所以最后的输出结果是a a
      

  6.   

    试试:
    public class test {
    String s = "a";
    private void change (test ss) {
    ss.s = null;//update

    }
    public static void main(String args[]) {
    test t = new test();
    System.out.println(t.s);
    t.change(t);
    System.out.println(t.s);
    }
    }
      

  7.   

    楼上老兄程序的结果应该是a  null
    因为在他的程序中对其中的一个引用做了改变(ss.s = null),所以两个引用都改变了
      

  8.   

    同意 jgo(航海家) 代码似乎改成这样更明显一些:public class test {
    String s = "a";
    private test change1 (test ss) {
    ss = null;
    return ss;
    }
    private test change2 (test ss) {
    return ss;
    }
    public static void main(String args[]) {
    test t = new test();
    System.out.println(t.s);

    test t2 = t.change1(t);
    System.out.println(t2==null);
    System.out.println(t.equals(t2));

    test t3 = t.change2(t);
    System.out.println(t3==null);
    System.out.println(t.equals(t3));
    }
    }输出结果:a
    true
    false
    false
    true
      

  9.   

    chang()方法中的确是传的引用,但是,这个方法是void的,所以只能是对改地址进行操作,但是如果赋值为null,相当于重新分配了一个内存地址,而原先的地址中的内容还是没有改变,所以不会出现问题,如果该方法改为这样:private test change (test ss) {
    ss = null;
    return ss;
    }
    就不会出现刚才的情况了
      

  10.   

    刚刚在.NET Framework SDK看到一段文字,感觉对值和引用理解的比较深刻,贴上来大家共享,不过不是针对java的,大家不要死扣字眼:值是数据的二进制表示形式,类型提供了一种解释该数据的方式。值类型直接以类型数据的二进制表示形式存储。引用类型的值是表示该类型的数据的位序列的位置。
    每个值都有一个准确的类型,完全定义了值的表示形式和针对值定义的操作。自描述类型的值称为对象。通过检查值,总是可以确定对象的准确类型,但却不能这样处理值类型和指针类型。值可以有多种类型。一种实现某一接口的类型,其值也是该接口类型的值。同样,从某一基本类型派生的类型,其值也是该基本类型的值。
      

  11.   

    public class test {
    String s = "a";
    private void change (test ss) {
    ss = null;l
    }
    public static void main(String args[]) {
    test t = new test();
    System.out.println(t.s);
    t.change(t);
    System.out.println(t.s);
    }
    }
    肯定是a a.