平常也没有怎么注意这方面的问题。
只是觉得对象是按引用传递,基本数据类型和String 是按值传递。
但是为什么返回值为 ArrayList 的测试和返回对象的不同呢这么问是不是有点拗口
上代码吧。public class ReturnTypeTest {

private Human human = null;
private List<String> testList = null;
public void init(){
testList = new ArrayList<String>();
testList.add("555");
human = new Human();
human.setName("Lu");
}
public static void main(String[] args) {
ReturnTypeTest test = new ReturnTypeTest();
test.init();

System.out.println(test.getTestList().size());
List<String> ss = test.getTestList();
System.out.println(ss.size());

ss = null;
System.out.println(ss);
System.out.println(test.getTestList());

Human h = test.getHuman();
System.out.println(h.getName());
h.setName("LuLu");
System.out.println(h.getName());
System.out.println(test.getHuman().getName());
}

public List<String> getTestList() {
return testList;
}
public void setTestList(List<String> testList) {
this.testList = testList;
} public Human getHuman() {
return human;
} public void setHuman(Human human) {
this.human = human;
}
}
现在有点迷糊了。
哪位路过的帅哥美女给顺便给讲解一下吧。

解决方案 »

  1.   

    没看明白你要说的是什么意思,看了下你的代码,你想说明的是什么啊?Java里面都是值传递,不是引用传递, System.out.println(test.getTestList());
     System.out.println(test.getHuman().getName());你是想说这两段代码打印的东西吗?首先test.getTestList()的值并没有边,因为你没有改变它里面的值,test.getHuman().getName(),这个你先是得到这个对象,然后再对这个对象进行修改,再下面调用的时候就是你修改过后的值了
      

  2.   

    我也很好奇为何最后2个getName()输出是一样的
      

  3.   

    我想问的是为什么        Human h = test.getHuman();
            h.setName("LuLu");
    之后,
            h.name 和 test.human.name 能一同改变。而
            List<String> ss = test.getTestList();
            ss = null;
    之后 
            test.testList没有跟着变为空
      

  4.   


    哦,在 ss.add("something") 后,是会一同改变。
    ss == null 为什么不能一同改变呢?
      

  5.   

    java里面都是值传递,所谓的引用传递,说白了,还是值传递,他传递的值是该对象的引用。
      

  6.   

    现在等于一块内存地址有2个引用 不管哪个引用add这个内存地址的值肯定会增加
    ss =null;只是释放了这个内存地址的一个引用
    你把一个引用SS 设为空 和内存地址里面的值没关系呀
      

  7.   


    那ss = test.getTestList(); 得到的是对象的引用了?
    ss = null; 这句话又是怎么执行的?
      

  8.   

    ss = null;
    这是把这个ss对其对象的引用释放了,就是不再对其进行引用了,而不会改变对象本身ss = test.getTestList();之后
    ss----> 对象1
    test.getTestList()---->对象1ss = null;之后是
    ss---->null
    test.getTestList()---->对象1
      

  9.   


    首先,说第一个问题,执行Human h = test.getHuman();后h和test.human是同一个对象的引用,所以一个的改变必然会导致另一个的改变。
    下面说说,第二个问题,执行List<String> ss = test.getTestList();后ss和test.testList是同一个对象的引用,执行ss = null;后ss就指向空,但是这个没有影响test.testList,test.testList还是指向那个对象。
      

  10.   

    ss = null;的意思是ss指向为空,也就是不指向任何对象。
      

  11.   

    哦。把test.testList 也设为 null,
    然后执行清理时,内存里原来 test.testList 指向的值会被回收。如果是这么个流程的话,那就总算明白了。