Java 为什么在这种情况下不需要对象实例化?

Java 为什么在这种情况下不需要对象实例化?,java,object,memory-management,reference,instantiation,Java,Object,Memory Management,Reference,Instantiation,为什么有时我们不必创建对象,只需将其分配给方法等?就拿下面的例子来说 List<String> list1 = new ArrayList<>(); List<String> list2 = Collections.synchronizedList(list1); List list1=new ArrayList(); List list2=集合。同步列表(list1); 这是否意味着list2被分配了一个ArrayList对象?在这种情况下,内存分配会发

为什么有时我们不必创建对象,只需将其分配给方法等?就拿下面的例子来说

List<String> list1 = new ArrayList<>();
List<String> list2 = Collections.synchronizedList(list1);
List list1=new ArrayList();
List list2=集合。同步列表(list1);

这是否意味着
list2
被分配了一个ArrayList对象?在这种情况下,内存分配会发生什么变化?谢谢

List2被分配了列表的一些实现。在这种情况下,它要么是
synchronizedAndomAccessList
对象,要么是
SynchronizedList
对象,而不是
ArrayList

是源代码:

public static <T> List<T> synchronizedList(List<T> list) {
        return (list instanceof RandomAccess ?
                new SynchronizedRandomAccessList<>(list) :
                new SynchronizedList<>(list));
}
公共静态列表同步列表(列表列表){
返回(列出随机访问的实例)?
新同步随机访问列表(列表):
新同步列表(列表));
}

在这种情况下,静态方法
synchronizedList()
只是一个助手。java中的对象(不是原语值)负责将引用传递到内存位置。因此
synchronizedList()
返回对
newsynchronizedList()
对象的内存引用,通过调用它,您可以将该内存位置分配给
list2
对象

List2被分配了列表的一些实现。在这种情况下,它要么是
synchronizedAndomAccessList
对象,要么是
SynchronizedList
对象,而不是
ArrayList

是源代码:

public static <T> List<T> synchronizedList(List<T> list) {
        return (list instanceof RandomAccess ?
                new SynchronizedRandomAccessList<>(list) :
                new SynchronizedList<>(list));
}
公共静态列表同步列表(列表列表){
返回(列出随机访问的实例)?
新同步随机访问列表(列表):
新同步列表(列表));
}

在这种情况下,静态方法
synchronizedList()
只是一个助手。java中的对象(不是原语值)负责将引用传递到内存位置。因此
synchronizedList()
返回对
newsynchronizedList()
对象的内存引用,通过调用它,您可以将该内存位置分配给
list2
对象

始终需要对象实例化。在Java中有两个内存区域:线程堆栈和堆

  • 原语(即非对象的变量)如boolean、byte、short、char、int、long、float、double存储在线程堆栈中
  • 使用
    new
    关键字创建的对象将在堆中分配

在您的情况下,在方法
集合中实例化的
列表
对象。synchronizedList
将在堆中分配,并且对该列表的引用将分配给局部变量
list2

始终需要对象实例化。在Java中有两个内存区域:线程堆栈和堆

  • 原语(即非对象的变量)如boolean、byte、short、char、int、long、float、double存储在线程堆栈中
  • 使用
    new
    关键字创建的对象将在堆中分配
在您的情况下,在方法
集合中实例化的
列表
对象。synchronizedList
将在堆中分配,对该列表的引用将分配给局部变量
列表2