携带对象的变量类型是什么?

What is the variable type that carry objects?

现在,当我从特定的 class 在 Java 中创建一个新对象并将其分配给一个变量时,我们如何称呼该变量?

Class1 new1 = new Class1();

问题是"new1"是对象还是携带对象的变量。 另外,当我们说,

public class Class1 {
Class2 n1;
}
public class Class2{
void method();
}

n1被认为是实例变量还是另一个class的对象?

如果是写前携带的对象,

n1 = new Class2();

  • 问题一:这叫参考。 new1保存了一个内存地址1,新创建的Class1类型的对象所在。

  • 问题2:一般情况下,你称它为属性或字段。它是一个对象而不是原始对象这一事实在这里并不重要。

  • 问题3:未初始化的引用是null,如果它是class属性。然而,如果引用是一个局部变量,它是 未初始化的,正如 EJP 指出的那样。您不能读取未初始化的局部变量,这将导致编译错误。

进一步说明:在Java中,对象总是存储在堆内存中。没有例外。但是,您的局部变量(如第一个示例中的 new1 )位于堆栈上并引用堆上的新对象。这就是为什么 Java 是 pass-by-value.

的原因

1 其实引用的不是内存地址,而是一个唯一的id。 Java隐藏物理内存地址。

When I create a new object in Java from a particular class and assign it to a variable what do we call that variable?

一般情况下,我们就称它为变量。

我们也可以称它为初始化变量。但是 "initialized" 只是一个形容词,反映了你给它赋值的事实。还有其他形容词可以适用;例如"instance variable"、"local variable"、"class variable",其中一些有常见的同义词。

The question is about "new1" if it it's an object or a variable carrying an object.

这绝对不是一个对象。

Is n1 considered to be an instance variable or an object of another class?

这是一个"instance variable"。它也称为 "field" 或 "attribute",但 "instance variable" 是 Java 语言规范使用的术语。

If it's an object what it's carrying before writing n1 = new Class2();

它不是一个对象。变量不是对象,也不是原始值。变量将保存一个值,但它不是一个值。

(经常打个比方,变量是一个"slot"或"pigeonhole",可以装东西,变量是槽,不是槽里的东西。)

如果变量 n1 是一个实例变量,它的状态将是 null。如果 n1 是局部变量,Java 语言不会让你看到状态是什么...因为在显式初始化之前访问局部变量是非法的。