对不起,我已经纠正了逻辑a但是,我的要求是不同的。然而,在引用Java引用之后,它得到了澄清,它引入了另一个引用变量,同时将其推送到堆栈或列表或数组。
public class Node {
public int data;
public Node left;
public Node right;
}
public static void main(String[] args) {
Node[] arr = new Node[10];
Stack<Node> s = new Stack<Node>();
List<Node> ls = new ArrayList<Node>();
List<Integer> list = new ArrayList<Integer>();
for(int i = 0; i <10; i++) {
Node a = new Node();
a.data = i;
s.push(a); -> another reference to a is created and pushed
ls.add(a); -> another reference to a is created and pushed
arr[i] = a; -> -> another reference to a is created and pushed
a = null; // referencing it to null, makes one of the references
//to null
}
for(Node i : s) {
System.out.println("result"+i.data); // prints 1-9
}
for(Node i : ls) {
System.out.println("result"+i.data); // prints 1-9
}
System.out.println(arr.length); // prints 10
for(Node i : arr) {
System.out.println("result2"+i.data); // prints 1-9
}
}
什么是堆栈的push()或list的add()使对象保持其值?即使我将其值设置为null。它是否像变量副本一样 感谢。
答案 0 :(得分:1)
在实际代码中,当您访问数组的出界索引时,循环将引发异常:10
。
关于第二个循环中的打印问题,你会得到一个NPE,因为数组的第一个索引没有在你的第一个循环中被评估:你把它开始到1
但是在第二个循环中你使用a来迭代所有数组的索引:0
包含。
arr[0]
为null
,arr[0].data
只能提升NPE。
士气:将你的循环初始化为0
以填充数组:
for(int i = 0; i < 10; i++) {...}
它避免了这种错误。