【发布时间】:2013-08-17 10:58:58
【问题描述】:
考虑以下案例。
List<Integer> listOne = new ArrayList<>();
List<Integer> listTwo = new ArrayList<>();
listOne.add(1);I think this happens due to
listOne.add(2);
listOne.add(3);
Collections.reverse(listOne);
listTwo = listOne; //listTwo has same reference
Collections.reverse(listOne);
System.out.println(listOne); //out put [1, 2, 3]
System.out.println(listTwo); // same out put
Java is pass by value, where values (for non primitive types) happen to be references.我认为这为这种情况下的java提供了生存。老实说,为什么java 尽量避免pass by reference 并尝试与some of other languages 不同?而java仍然遭受引用传递行为的困扰?
编辑:另外请有人解释上面代码中发生的事情
【问题讨论】:
-
Java 没有受到引用传递行为的困扰?
-
嗯,你在问什么? Java 不会尝试做任何事情。它是一种语言,以一种方式设计/定义。但是,我要么不明白这个问题,要么在这里以有意义的方式回答。
-
@Ruchira 您应该更改问题的标题。
-
Java 是按值传递的,而且一直如此。令人困惑的是
List这里是一个 reference 而不是一个对象,当您按值传递引用时,该引用被复制,而不是对象。
标签: java pass-by-reference pass-by-value