Java 在堆中使用对Class()的新运算符调用放置多个调用时会发生什么情况?

Java 在堆中使用对Class()的新运算符调用放置多个调用时会发生什么情况?,java,object,new-operator,heap-memory,dynamic-memory-allocation,Java,Object,New Operator,Heap Memory,Dynamic Memory Allocation,当我们打以下电话时:- class Class{ int x; public Class(int a){ x = a; } public void display(){ System.out.println(x); } } 在main方法中,我们使用类的对象来显示数据:- new Class(5).display(); // object 1 new Class(7).display(); // object 2 现在,我的问题是:- 我所表示的对象1和对象2是否相等 不同(

当我们打以下电话时:-

class Class{
int x;
public Class(int a){
 x = a;
}
public void display(){
 System.out.println(x);
}
}
在main方法中,我们使用类的对象来显示数据:-

new Class(5).display();    // object 1
new Class(7).display();    // object 2
现在,我的问题是:-

我所表示的对象1和对象2是否相等 不同(就堆中的内存位置而言)?两个是否分开 内存位置将在堆(动态内存分配器)或 是否将使用相同的对象(堆中的内存位置)

很久以来我就有这种困惑。而且,我只是一个爪哇的noob


请使用
new
调用详细说明堆部分/类对象的动态内存分配。

当您使用
new
操作符创建两个对象时,它们会将您视为堆中的不同对象。因此,如果与
==
相比,它们不会有太多。但是,如果您的代码是JIT编译的,那么堆分配将根本不会发生,因为JIT编译器足够聪明,可以内联构造函数和
display()
方法,并得出结论认为它可以重写为

System.out.println(5);
System.out.println(7);

但是如果您实际将它们与
=
进行比较,那么可能会关闭此优化,并在堆上分配两个不同的对象。

每次使用新操作符时,堆中都会有两个不同的对象

public class Test {
int x;
public Test(int a){
 x = a;
}
public void display(){
 System.out.println(x);
}
public static void main(String args[]){
    Test firstInstance = new Test(5);
    Test secondInstance = new Test(5);
    if(firstInstance == secondInstance)
        System.out.println("same");
    else
    {
        System.out.println("firstInstance"+firstInstance);
        System.out.println("secondInstance"+secondInstance);
    }
}

}

您的类被称为
A
,但是您创建了
新类
?您的代码不太可能编译,因为您使用大写的
,实际的类名是
A
,而不是
。请你用编译器检查一下你的代码,然后编辑提交工作代码的问题好吗?@TagirValeev-对不起,编辑过了。那是打字错误!但是,我希望你们能清楚地了解这个想法!我假设
对象x
是指
新类()
的实例化结果,而不是
显示()的返回。那么答案是它们是分开的。请下次不要将
作为伪类名,它很容易与