首页 > 解决方案 > 为什么 getName() 返回 null?

问题描述

编辑:感谢所有的答案!我不知道pList.java 中的对象与 Main.java 中的对象不同p。我将它作为参数传递,现在它工作正常。谢谢!

在 Main.java 中:

        System.out.println("Enter your name:");
        String name = scan.next();
        name+=scan.nextLine();

        String words[]=name.split("\\s");  
        String capitalizeWord="";  
        for(String w:words){  
            String first=w.substring(0,1);  
            String afterfirst=w.substring(1);  
            capitalizeWord+=first.toUpperCase()+afterfirst+" ";  
        }

        Person p = new Person(capitalizeWord);

在 Person.java 中

    private String name;
    private int age;

    Person(String newName){
        name=newName;
    }

    Person(int newAge){
        age=newAge;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

在 List.java 中:

public void printInvoice(){
        System.out.println("Enter your age:");
        int age = scan.nextInt();

        Person p = new Person(age);
        System.out.println("Thank you for shopping with us, "+p.getName());
}

最后的输出是

Thank you for shopping with us, null

我不知道为什么会这样。我做错什么了吗?我认为代码是正确的?

标签: javastringobjectencapsulation

解决方案


你有两个构造函数。一种接受字符串,一种接受数字。

在您的最新示例中,您调用了接受数字的示例,并且由于没有初始化name成员,因此它被初始化null为默认值。

pin与inMain.java无关(它们是两个不同的变量),因此初始化前者对后者没有影响。pList.java


推荐阅读