class User{}class Test{
public static void main(String[] args){
List<User> l = new ArrayList<User>();
l.add(new User());
User user = l.get(0);
user = null; System.out.println(l.get(0));
}
}输入的结果表明List中的引用依旧指向原来的对象, 并没有变成null.
是否说明 从List中获取一个对象时, 得到的是List中保存的引用的一个副本?还想请教一下, 假如在方法内部生成一个对象引用, 然后return出去, 那么return出去的引用与生成的引用是一个, 还是一个副本?
public static void main(String[] args){
List<User> l = new ArrayList<User>();
l.add(new User());
User user = l.get(0);
user = null; System.out.println(l.get(0));
}
}输入的结果表明List中的引用依旧指向原来的对象, 并没有变成null.
是否说明 从List中获取一个对象时, 得到的是List中保存的引用的一个副本?还想请教一下, 假如在方法内部生成一个对象引用, 然后return出去, 那么return出去的引用与生成的引用是一个, 还是一个副本?
User user = l.get(0);//User user声明一个User指针(java里没有指针,也就相当于一个User变量),然后给user这指针赋值,也就让user指向和l.get(0)一样的地址,这样user的引用值和l.get(0)的引用值是一样的
user = null;//这里相当于给user指针重新赋值,让user指向null,但是不影响l.get(0)本身的地址,所以l.get(0)的引用值没有任何变化
引用的副本是C针对引用类型 & 的说法,完全是两码事
在方法内部生成一个对象引用,return出去的是一个临时的指向该对象引用的指针(也就是java的引用),这个return出去的和生成的引用同时指向(引用)同一个对象