为什么有时我们不需要创建一个对象,只需将它分配给方法等?以下面为例。为什么在这种情况下不需要实例化对象?
List<String> list1 = new ArrayList<>();
List<String> list2 = Collections.synchronizedList(list1);
这是否意味着list2
被分配了一个ArrayList对象?在这种情况下内存分配会发生什么?谢谢!
为什么有时我们不需要创建一个对象,只需将它分配给方法等?以下面为例。为什么在这种情况下不需要实例化对象?
List<String> list1 = new ArrayList<>();
List<String> list2 = Collections.synchronizedList(list1);
这是否意味着list2
被分配了一个ArrayList对象?在这种情况下内存分配会发生什么?谢谢!
List2被分配了一些列表的实现。在确切的情况下,它可能是SynchronizedRandomAccessList
对象或SynchronizedList
对象,但不是ArrayList
。
Here是源代码:
public static <T> List<T> synchronizedList(List<T> list) {
return (list instanceof RandomAccess ?
new SynchronizedRandomAccessList<>(list) :
new SynchronizedList<>(list));
}
静态方法synchronizedList()
只是在这种情况下一个帮手。 java中的对象(不是原始值)用于传递对内存位置的引用。因此synchronizedList()
返回一个对new SynchronizedList()
对象的内存引用,通过调用它可以将该内存位置分配给list2
对象。
总是需要对象实例化。在Java中有两个内存区域:线程堆栈和堆。
new
关键字在堆在你的情况下,在方法Collections.synchronizedList
实例化的List
对象将在Heap和参考这个名单被分配分配将被分配到局部变量list2