给全局 ListNode 一个临时地址(在 While 块中分配)是否安全?
Is it safe to give a temporary address ( assigned in a While block ) to a global ListNode?
Link: https://leetcode.com/problems/add-two-numbers/solution/#
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
int carry = 0;
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (p != null) p = p.next;
if (q != null) q = q.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}
}
大家好,今天早上我在LeetCode上遇到一道题。我解决了它但想向官方解决方案提出问题。
我知道引用函数中定义的变量是不安全的(因为它会被回收)。然而,据我所知,那些在 while/for 等代码块中 定义的变量也应该被 JVM 回收。虽然 JVM 不会回收它,因为仍然有指针指向该地址,但我想 在这里给一个全局 ListNode 一个临时地址是否仍然不安全?
curr.next = new ListNode(carry);
毕竟我想知道ListNode是不是因为使用了临时地址,需要经常被JVM监视,导致额外的时间消耗?
谢谢!我在Leetcode的问题讨论中也讨论了以上内容,但我真的很想知道我是否考虑太多?
我可以假设您已经使用过 Java 语言(就像您已经编写了 C 语言一样)
关于你的顾虑,我可以总结一下
您担心的是
curr.next = new ListNode(carry);
curr 可以被 java GC 回收,这可能会导致 access next 引发异常? => 别担心。 curr 仅在执行 addTwoNumbers() 后收集(至少)。
所以你的问题
if it's still not safe to give a temporary address to a global ListNode here?
=> 不,它是安全的。你简单的构造一个新对象就可以了
下次关注
the ListNode has to be frequently watched by JVM for using a temporary address, resulting in extra time consumption?
据我所知,您的作业没有额外的时间消耗。
Link: https://leetcode.com/problems/add-two-numbers/solution/#
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
int carry = 0;
while (p != null || q != null) {
int x = (p != null) ? p.val : 0;
int y = (q != null) ? q.val : 0;
int sum = carry + x + y;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (p != null) p = p.next;
if (q != null) q = q.next;
}
if (carry > 0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}
}
大家好,今天早上我在LeetCode上遇到一道题。我解决了它但想向官方解决方案提出问题。
我知道引用函数中定义的变量是不安全的(因为它会被回收)。然而,据我所知,那些在 while/for 等代码块中 定义的变量也应该被 JVM 回收。虽然 JVM 不会回收它,因为仍然有指针指向该地址,但我想 在这里给一个全局 ListNode 一个临时地址是否仍然不安全?
curr.next = new ListNode(carry);
毕竟我想知道ListNode是不是因为使用了临时地址,需要经常被JVM监视,导致额外的时间消耗?
谢谢!我在Leetcode的问题讨论中也讨论了以上内容,但我真的很想知道我是否考虑太多?
我可以假设您已经使用过 Java 语言(就像您已经编写了 C 语言一样) 关于你的顾虑,我可以总结一下
您担心的是
curr.next = new ListNode(carry);
curr 可以被 java GC 回收,这可能会导致 access next 引发异常? => 别担心。 curr 仅在执行 addTwoNumbers() 后收集(至少)。
所以你的问题
if it's still not safe to give a temporary address to a global ListNode here?
=> 不,它是安全的。你简单的构造一个新对象就可以了
下次关注
the ListNode has to be frequently watched by JVM for using a temporary address, resulting in extra time consumption?
据我所知,您的作业没有额外的时间消耗。