【发布时间】:2014-12-03 22:44:54
【问题描述】:
来自Java in a Nutshell, 2.10 Reference Types,
Java 不直接操作对象和数组。相反,它 操作对对象和数组的引用。因为 Java 处理 引用的对象和数组,类和数组类型被称为 引用类型。相反,Java 处理原语的值 直接类型或按值类型。
但从下面看来,原始包装类(对象)实际上是通过值而不是引用来处理的,
> Integer foo = new Integer(1);
> Integer bar = foo;
> bar = new Integer(2);
> foo
1
那么上面的引用是不是不太对?
更新:我的困惑来自于误解了我上面的代码 sn-p 与以下代码之间的区别:
> import java.util.LinkedList;
> LinkedList<Integer> foo = new LinkedList<Integer>();
> foo.add(1);
> LinkedList<Integer> bar = foo;
> bar.remove();
> System.out.println(foo.size());
0
> System.out.println(bar.size());
0
在后一种情况下,bar.remove() 实际上在 foo 和 bar 引用的 LinkedList 上运行。
【问题讨论】:
-
您分配给
bar,而foo不会改变。这不区分引用和值。