昨天面试java的时候,考官出了个java引用传递的问题,当时题目中有个List,我一时拿不准打错了,后来我回头试了一下得出了结果。
如题:
import java.util.ArrayList; import java.util.List; public class TT { public static void main(String[] args) { Word w1 = new Word("w1"); List<Word> list = new ArrayList<Word>(); list.add(w1); Word w2 = list.get(0); w2.setWord("w2"); w1.setWord("w11"); list.get(0).setWord("list"); System.out.println(w1.getWord()); System.out.println(w2.getWord()); System.out.println(list.get(0).getWord()); } } public class Word { private String word; public String getWord() { return word; } public void setWord(String word) { this.word = word; } public Word(String word) { super(); this.word = word; } public Word() { } }
运行的结果是:
list
list
list
这里面有一个很多人特别是初学者忽视了的观点――变量可以引用对象,但变量不是对象。什么是对象?对象初始化之后,会占用一块内存空间,严格意义上讲,这段内存空间才是对象。对象创建于数据段,而变量存在于代码段;对象的入口地址是不可预知的,所以程序只能通过变量来访问对象。
这里的w1、w2、list.get(0)都是引用的同一个对象new Word("w1");所以w1、w2、list.get(0)依次改word的值,最终的是最后一个改的值。List中的add也只是引用了其他对象。
JAVA引用传递问题
最新推荐文章于 2023-04-19 18:11:20 发布