Java变量范围,变量赋值和声明在不同的函数中

时间:2015-03-24 03:51:38

标签: java

我厌倦了以下Java代码,结果是" null"。我认为两个n是指向不同内存的相同指针(在主函数和测试函数中)。如果我在main函数中将n作为null启动,则将其分配给测试函数并希望在测试函数之外使用它(不返回n本身)。我该怎么办?

public class ttt {
    static class LinkNode {
        int val;

        public LinkNode(int p) {
            val = p;
        }

    }

    public static void test(Set<LinkNode> n) {
        n = new HashSet<>();
        LinkNode a = new LinkNode(1);
        n.add(a);
    }

    public static void main(String[] args) {
        Set<LinkNode> n = null;
        test(n);
        System.out.println(n);
    }

}

1 个答案:

答案 0 :(得分:0)

当你做了

n = new HashSet<>();

您覆盖了传递到n的{​​{1}}的值,但这并未重置test(...)n的值

这意味着您已将main(...)添加到您在a中创建的新LinkNode,但test(...)中的n引用了旧版main(...) } null退出LinkNode

后,分配和添加将丢失给垃圾回收器