ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 在另一个方法中初始化对象时的NullPointerException

2019-05-28 13:51:12  阅读:200  来源: 互联网

标签:java nullpointerexception binary-tree


我试图了解二叉树和NullPointerException即将到来.所以我决定写一个小程序试图理解它.这是代码:

public class Nulls
{
    static Node node;
    private class Node
    {
        int val;
        Node right;
        Node left;
    }
    public void init(Node n)
    {
        if(n==null)n=new Node();
    }
    public void print()
    {
         System.out.println(node);
    }
    public static void main(String[] args)
    {
        Nulls n=new Nulls();
        n.init(node);
        n.print();
    }
}

输出为null.如果我理解正确,则初始化节点对象,输出应该是对象的toString()方法.并且由于print()方法在init(节点n)之后执行,因此输出不应为null.问题是什么?

解决方法:

根本原因是Java参数是通过值传递的,这意味着,当您将(引用)节点n作为参数传递时,实际上是将该引用的副本传递给该节点,当时该节点为null .由于您正在更改复制引用,因此实际上没有分配任何内容,并且在init完成执行时,您在init中创建的新节点符合GC条件.

但这很容易解决:

public class Nulls {

    static Node node;

    private class Node {
        int val;
        Node right;
        Node left;
    }

    public void init() {
        if(node==null) {
            node=new Node();
        }
    }

    public void print() {
        System.out.println(node);
    }

    public static void main(String[] args) {
        Nulls n=new Nulls();
        n.init();
        n.print();
    }
}

标签:java,nullpointerexception,binary-tree
来源: https://codeday.me/bug/20190528/1171441.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有