Java空对象

Java空对象,java,null,Java,Null,据我所知,在java中,你不能直接访问对象,你只有指向它的指针。例如,我有以下代码: public class App { public App() { Thing t = null; doStuff(t); System.out.println(t); } public void doStuff(Thing a) { a = new Thing(); } public static vo

据我所知,在java中,你不能直接访问对象,你只有指向它的指针。例如,我有以下代码:

public class App {
    public App() {
        Thing t = null;
        doStuff(t);
        System.out.println(t);
    }

    public void doStuff(Thing a) {
        a = new Thing();
    }

    public static void main(String[] args) {
        new App();
    }
}

class Thing { }

并且输出为空。为什么?我已经将指针传递给一个方法,该方法给它一个新的东西实例来指向。是因为它是一个新指针吗?另外,如何在不从doStuff()返回任何内容的情况下解析它?

您有引用而不是指针,并且如果没有调用者中的赋值,方法无法更新调用者引用-因此

public App() {
    Thing t = null;
    doStuff(t);
    System.out.println(t);
}

public void doStuff(Thing a) {
    a = new Thing();
}
如果你这么做的话会有用的

public App() {
    Thing t = null;
    t = doStuff(t);
    System.out.println(t);
}

public Thing doStuff(Thing a) {
    a = new Thing();
    return a;
}

这是因为Java是通过对象引用的传递值来工作的,而不是通过对象引用来工作的,即使引用是一个对象,它也会通过引用值来传递。因此,您总是使用新的引用

引用:

声明引用对象的变量

之前,您了解到,要声明变量,您需要编写:

类型名称;这会通知编译器您将使用名称来引用 指向类型为类型的数据。对于一个基本变量,这个 声明还为 变数

您还可以在引用变量本身的行上声明引用变量。对于 例如:

点原酮;如果你像这样声明originOne,它的值将是 未确定,直到实际创建并指定了对象。 仅声明引用变量不会创建对象。对于 因此,您需要使用新运算符,如下一节所述 节。在中使用对象之前,必须将其指定给originOne 你的密码。否则,将出现编译器错误

当前未引用任何对象的处于此状态的变量可以 如下图所示(变量名,originOne,加上引用 不指向任何内容):


1) 您可以使用ststic方法访问内容,而无需创建类的实例。2)
doStuff
中的变量是该方法的局部变量,因此它保持
null
在外部。查看类变量或返回创建的
对象
。Java使用传递值,参数变量永远不会是传递的某个变量的别名。而是传递一个对象(指针)。