Java 为什么不存储';新';在变量中

Java 为什么不存储';新';在变量中,java,new-operator,Java,New Operator,我被告知,new关键字创建一个类的实例,并返回一个存储在内存中的对象,该对象被分配给类类型的变量。如果粗体的陈述是正确的,为什么下面的陈述没有错误 new Class(); 因为没有为类分配变量,而new返回变量?上述语句没有错误,因为调用构造函数的代码选择对对象的引用不做任何操作 也许一个项目有一个用于启动视图行为的包罗万象的类。您可以选择在main方法中实例化自定义视图类的实例,以模拟此行为: public static void main(String[] args) {

我被告知,
new
关键字创建一个类的实例,并返回一个存储在内存中的对象,该对象被分配给类类型的变量。如果粗体的陈述是正确的,为什么下面的陈述没有错误

new Class(); 

因为没有为类分配变量,而
new
返回变量?

上述语句没有错误,因为调用构造函数的代码选择对对象的引用不做任何操作

也许一个项目有一个用于启动视图行为的包罗万象的类。您可以选择在main方法中实例化自定义视图类的实例,以模拟此行为:

public static void main(String[] args) {
        new MyClass();
}
然后在
MyClass
对象中:

public class MyClass {
    public MyClass() {
         //do stuff here
    }

}

上面的语句没有错,因为调用构造函数的代码选择对对象的引用不做任何操作

也许一个项目有一个用于启动视图行为的包罗万象的类。您可以选择在main方法中实例化自定义视图类的实例,以模拟此行为:

public static void main(String[] args) {
        new MyClass();
}
然后在
MyClass
对象中:

public class MyClass {
    public MyClass() {
         //do stuff here
    }

}

谁告诉过你,新的是按你说的做的
new
创建一个对象并返回对该对象的引用。它不会将任何内容分配给任何人,因为java中的赋值运算符是
=

以下是java教程的摘录:

新操作符通过为新对象分配内存并返回对该内存的引用来实例化类。新操作符还调用对象构造函数


谁告诉你,
new
按你说的做
new
创建一个对象并返回对该对象的引用。它不会将任何内容分配给任何人,因为java中的赋值运算符是
=

以下是java教程的摘录:

新操作符通过为新对象分配内存并返回对该内存的引用来实例化类。新操作符还调用对象构造函数

“创建类的实例并返回存储在内存中的对象地址”部分基本上是正确的,只是从技术上讲,它是Java自己对对象位置的表示,而不是实际内存地址——“引用”是一个更好的术语。“将其分配给变量”部分与
new
完全无关;作业由
=
完成,例如
Class c=newclass()

如果您没有
=
,则不会将地址分配给任何对象。这通常是毫无意义的,因为它相当于扔掉新对象,但它是合法的,因为它有时是有用的(如果构造函数有一些您感兴趣的副作用)。使用
new
返回的引用调用方法也是合法的,例如
new Class().doSomething()
,或者将其作为参数传递:
doSomethingElse(new Class())

创建类的实例并返回存储在内存中的对象地址”部分基本正确,除了从技术上讲,它是Java自己对对象位置的表示,而不是实际的内存地址——“引用”是一个更好的术语。“将其分配给变量”部分与
new
完全无关;作业由
=
完成,例如
Class c=newclass()


如果您没有
=
,则不会将地址分配给任何对象。这通常是毫无意义的,因为它相当于扔掉新对象,但它是合法的,因为它有时是有用的(如果构造函数有一些您感兴趣的副作用)。使用
new
返回的引用调用方法也是合法的,例如
new Class().doSomething()
,或者将其作为参数传递:
doSomethingElse(new Class())
new是一个Java关键字。它为存储在内存中的类和对象地址创建一个Java对象。它还在堆上为它分配内存。新建也用于创建数组,因为数组也是对象

范例-

int[] intArray = new int[10];
String[][] stringMatrix = new String[5][10];

new是一个Java关键字。它为存储在内存中的类和对象地址创建一个Java对象。它还在堆上为它分配内存。新建也用于创建数组,因为数组也是对象

范例-

int[] intArray = new int[10];
String[][] stringMatrix = new String[5][10];

简而言之,一旦到达语句末尾,实例化的结果将立即被丢弃。您没有给它分配变量。编译器只会创建一个类。。它实际上不会用它做任何事情,也不会以任何方式保存它。垃圾清洁器被视为符合要求。您的错误是什么?正如mike所说,您可以在一行上有一个新的X(),而无需将结果赋给一个值,它就能很好地编译。
new
将返回该地址,它将被丢弃,因为您没有将其存储在任何地方。为什么这会有用?考虑单点/单射物体,只需实例化它就是你需要做的所有事情。保存对象引用没有意义,因为您想做的一切都是在构造函数中完成的。@mikeTheLiar它不会立即被丢弃。如果在保存执行的构造函数中发生任何事情。此外,GC将决定何时放弃它。简言之,一旦到达语句末尾,实例化的结果将立即被放弃。您没有给它分配变量。编译器只会创建一个类。。它实际上不会用它做任何事情,也不会以任何方式保存它。垃圾清洁器被视为符合要求。您的错误是什么?正如mike所说,您可以在一行上有一个新的X(),而无需将结果赋给一个值,它就能很好地编译。
new
将返回该地址,它将被丢弃,因为您没有存储它