传递给java列表的对象的内存引用 private final Map namedMessageMap=new HashMap(); List messageList=namedMessageMap.get(queueName); if(messageList==null){ messageList=newarraylist(); namedMessageMap.put(queueName,messageList); } //将项目添加到队列中 messageList.add(消息);
我有这个代码,现在我在想一件事,我传递给namedMessageMap的消息列表将包含我在末尾添加的消息?在这种情况下,java内存分配是如何工作的?它指向一个新对象或内存引用?新建ArrayList();这将始终创建新对象,messageList将指向指定的最新列表。因此,它将包含您在末尾添加的消息。我传递给namedMessageMap的列表将包含我在末尾添加的消息>>为什么不试试看?^^传递给java列表的对象的内存引用 private final Map namedMessageMap=new HashMap(); List messageList=namedMessageMap.get(queueName); if(messageList==null){ messageList=newarraylist(); namedMessageMap.put(queueName,messageList); } //将项目添加到队列中 messageList.add(消息);,java,arraylist,garbage-collection,dynamic-memory-allocation,Java,Arraylist,Garbage Collection,Dynamic Memory Allocation,我有这个代码,现在我在想一件事,我传递给namedMessageMap的消息列表将包含我在末尾添加的消息?在这种情况下,java内存分配是如何工作的?它指向一个新对象或内存引用?新建ArrayList();这将始终创建新对象,messageList将指向指定的最新列表。因此,它将包含您在末尾添加的消息。我传递给namedMessageMap的列表将包含我在末尾添加的消息>>为什么不试试看?^^新建ArrayList();将创建新对象(涉及内存分配)哪个引用存储在messageList变量中,然后
新建ArrayList();
将创建新对象(涉及内存分配)哪个引用存储在messageList
变量中,然后将此引用放入映射中(复制引用)。最后,将消息添加到列表实例(对象)中,列表实例(对象)由messageList
reference访问。两者都是namedMessageMap.get(queueName)
和messageList
将引用同一对象,因此namedMessageMap.get(queueName)
将返回对更新对象的引用。在Java中,只有对象。没有“内存引用”之类的东西,这是一个你刚刚发明用来迷惑自己的术语。在幕后,实现可能会使用对象的内存,但这是你不应该考虑的,尤其是当它让你无法理解如此简单的代码时。
private final Map<String, List<EventMessage>> namedMessageMap = new HashMap<>();
List<EventMessage> messageList = namedMessageMap.get(queueName);
if (messageList == null) {
messageList = new ArrayList<>();
namedMessageMap.put(queueName, messageList);
}
// Add the item in queue
messageList.add(message);