Java 为全局ListNode提供临时地址(在While块中分配)安全吗?

Java 为全局ListNode提供临时地址(在While块中分配)安全吗?,java,jvm,memory-address,Java,Jvm,Memory Address,链接: 大家好,今天早上我在LeetCode上遇到了一个问题。我解决了这个问题,但我想提出一个关于正式解决方案的问题 我知道引用函数中定义的变量是不安全的(因为它会被循环)。然而,据我所知,那些在while/for等代码块中定义的变量也应该由JVM循环使用。尽管JVM不会回收它,因为仍然有指向地址的指针,但我想知道在这里给全局ListNode一个临时地址是否仍然不安全 curr.next = new ListNode(carry); 毕竟,我想知道JVM是否必须经常监视ListNode以使用临

链接:

大家好,今天早上我在LeetCode上遇到了一个问题。我解决了这个问题,但我想提出一个关于正式解决方案的问题

我知道引用函数中定义的变量是不安全的(因为它会被循环)。然而,据我所知,那些在while/for等代码块中定义的变量也应该由JVM循环使用。尽管JVM不会回收它,因为仍然有指向地址的指针,但我想知道在这里给全局ListNode一个临时地址是否仍然不安全

curr.next = new ListNode(carry);
毕竟,我想知道JVM是否必须经常监视ListNode以使用临时地址,从而导致额外的时间消耗


谢谢!我在Leetcode中的问题讨论中也讨论了上述问题,但我真的想知道我考虑的是否太多?

我可以假设您已经使用Java语言(就像您已经编写了C一样) 关于你的担心,我可以总结一下

  • 你担心的是

    curr.next=新列表节点(进位)

    该curr可由java GC回收,这可能会导致access下一次引发异常?=>别担心。只有在执行addTwoNumbers()之后(至少)才会收集curr

  • 那么你的问题是什么

    如果在这里为全局ListNode提供临时地址仍然不安全

    =>不,这是安全的。你只需构造一个新对象,就可以了

  • 下一个关注点

    JVM必须经常监视ListNode以使用临时地址,从而导致额外的时间消耗

    如我所见,在你的任务中没有额外的时间消耗


  • 我认为你混淆了很多事情。C不是Java,引用也不是它们指向的对象。我可以解决一个具体问题:
    curr.next=newlistnode(carry)
    是安全的,JVM不需要比Java代码中任何地方创建的任何其他对象更频繁地监视ListNode。在语言层面上甚至没有“地址”这样的东西。语言设计的全部要点是你不能做“不安全”的事情。
    curr.next = new ListNode(carry);