gpt4 book ai didi

java - 在循环内修改对象有什么问题吗?

转载 作者:行者123 更新时间:2023-11-30 04:15:52 25 4
gpt4 key购买 nike

public Collection<QueueMetrics> getAllGatewayQueueMetricsCurrent(String keywords)
{
QueueMetrics qmInput = null;
QueueMetrics qmImport = null ;
QueueMetrics qmReport = null ;
ArrayList<QueueMetrics> metrics = new ArrayList<QueueMetrics>();

for (String keyword : keywords.split(",")){
ConsoleServiceMBean console = getConsoleService(keyword);
populateMessageCountStr(qmInput, keyword, console, "input");
populateMessageCountStr(qmImport, keyword, console, "import");
populateMessageCountStr(qmReport, keyword, console, "report");
}
metrics.add(qmInput);
metrics.add(qmImport);
metrics.add(qmReport);

return metrics;
}

private void populateMessageCountStr(QueueMetrics qMetrics, String keyword, ConsoleServiceMBean console, String type)
{
QueueMetrics tempMetric = console.getGatewayQueueMetricsCurrent(type, keyword);
if( qMetrics == null ){
qMetrics = tempMetric ;
}else{
qMetrics.setPendingMessageCountStr( qMetrics.getPendingMessageCountStr() + ", " + tempMetric.getPendingMessageCount());
}

}

我尝试通过调用 populateMessageCountStr 并传入要更新的对象本身来更新上面的 for 循环内的 qmInput、qmImport 和 qmReport。在下一个循环中,同一对象将使用附加数据再次更新。然而,这个程序的最终结果是qmInput、qmImport和qmReport都为null。有人知道为什么吗?为了提供更多信息,当我稍微改变上面的功能时:

        qmInput = populateMessageCountStr(qmInput, keyword, console, "input");
qmImport = populateMessageCountStr(qmImport, keyword, console, "import");
qmReport = populateMessageCountStr(qmReport, keyword, console, "report");

下面的函数返回更新后的 QueueMetrics 而不是 void。该程序按预期工作。有人知道为什么原来的方法不起作用吗?我感谢任何有用的评论。

最佳答案

However, the end result of this program is that qmInput, qmImport and qmReport are all null.

因为,如果该方法中传递的 QueueMetrics 引用等于 null(第一次调用时它将是该值),则您将该方法重新分配给新对象。在这种情况下,原始引用仍将指向 null。因此,在该方法的所有进一步调用中,它将保持 null,因为条件 qMetrics == null 将始终为true。 p>

由于 Java 按值传递引用,因此将 qMetrics 重新分配给不同的实例,将更改所传递的引用副本的值。但不会修改原引用的引用值。

要解决此问题,只需从该方法返回修改后的引用即可(将 populateMessageCounterStr() 的返回类型更改为 QueueMetrics,并将其分配给原始引用主叫方。

关于java - 在循环内修改对象有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18412549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com