Java 声明一个单独的变量然后引用它是否比设置对新变量的引用花费更多的空间?

Java 声明一个单独的变量然后引用它是否比设置对新变量的引用花费更多的空间?,java,performance,optimization,memory-efficient,Java,Performance,Optimization,Memory Efficient,我找不到这个问题的直接答案,但如果我错了,请链接正确的问题 从本质上说,我是在问这是否有任何缺点: MyObject MyObject=新的MyObject; this.classReference=myObject; 与此相比: this.classReference=新的MyObject; 我的猜测是,将代码编译成字节码后,差异可以忽略不计。在这方面: MyObject myObject = new MyObject(); this.classReference = myObject; 有

我找不到这个问题的直接答案,但如果我错了,请链接正确的问题

从本质上说,我是在问这是否有任何缺点:

MyObject MyObject=新的MyObject; this.classReference=myObject; 与此相比:

this.classReference=新的MyObject; 我的猜测是,将代码编译成字节码后,差异可以忽略不计。

在这方面:

MyObject myObject = new MyObject();
this.classReference = myObject;
有两个变量包含对一个对象的引用。重要的是要理解“myObject”不是“object”,它包含对object的引用new'返回一个引用,该引用存储在'myObject'中,并复制到'classReference'中

顺便说一下,您的变量似乎命名错误-它不是对类的引用,而是对对象的引用,一个类的实例

因此,上述与此之间的唯一区别是:

this.classReference = new MyObject();
在前一种情况下,堆栈上为局部变量分配了空间,但分配可能在方法序言中,因此不需要额外的时间,然后需要将引用复制到其他地方。额外的开销非常小

这是假设编译器首先没有优化掉“myObject”。

在这种情况下:

MyObject myObject = new MyObject();
this.classReference = myObject;
有两个变量包含对一个对象的引用。重要的是要理解“myObject”不是“object”,它包含对object的引用new'返回一个引用,该引用存储在'myObject'中,并复制到'classReference'中

顺便说一下,您的变量似乎命名错误-它不是对类的引用,而是对对象的引用,一个类的实例

因此,上述与此之间的唯一区别是:

this.classReference = new MyObject();
在前一种情况下,堆栈上为局部变量分配了空间,但分配可能在方法序言中,因此不需要额外的时间,然后需要将引用复制到其他地方。额外的开销非常小


这是假设编译器没有首先优化掉“myObject”。

字节码是不同的,但JIT编译器将消除差异。本质上,我想问的是,这是否有任何缺点-您创建了一个不必要的堆栈变量。但是JIT编译器可能会也可能不会对此进行优化。什么是JIT@Andreasee您并不是在声明一个单独的对象,而是一个变量。字节码是不同的,但JIT编译器将消除这种差异。本质上,我想问的是,这是否有任何缺点-您创建了一个不必要的堆栈变量。但是JIT编译器可能会也可能不会对此进行优化。什么是JIT@Andreasee你不是在声明一个单独的对象,而是一个变量。