Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中,当两个int变量被赋予相同的值时,会发生什么(关于内存)?_Java - Fatal编程技术网

在java中,当两个int变量被赋予相同的值时,会发生什么(关于内存)?

在java中,当两个int变量被赋予相同的值时,会发生什么(关于内存)?,java,Java,我知道在java中,局部变量存储在堆栈上。但是,当两个int变量在javax中被赋予相同的值时,堆栈上的内存分配会发生什么情况?它们之间有什么关系?有任何形式的书面复制吗?那么它是如何工作的呢?显而易见的答案是int x=5;int y=5;与int x=5相同;int y=6;唯一的例外是,在您的例子中,与y关联的内存看起来与x的内存相同 很难想象一个JVM使用了某种写时复制语义,即x和y被分配相同的内存块,直到其中一个改变了值。据我所知,Java语言规范在理论上允许这样做,但它不太可能被任何

我知道在java中,局部变量存储在堆栈上。但是,当两个int变量在javax中被赋予相同的值时,堆栈上的内存分配会发生什么情况?它们之间有什么关系?有任何形式的书面复制吗?那么它是如何工作的呢?

显而易见的答案是int x=5;int y=5;与int x=5相同;int y=6;唯一的例外是,在您的例子中,与y关联的内存看起来与x的内存相同

很难想象一个JVM使用了某种写时复制语义,即x和y被分配相同的内存块,直到其中一个改变了值。据我所知,Java语言规范在理论上允许这样做,但它不太可能被任何像int这样微不足道的东西使用:设置写时拷贝的开销将远远超过它们从一开始就拥有不同的内存


<>兴趣,可以为C++ STD::string类编写写语义的副本,但是由于C++ 11被禁止了。它的值为5。 没有别的办法了

任何局部/全局、基本/非基本变量都存储一些值

原语值是根据类型指定的值


对于非原语值,它是堆中对象的内存地址,但最后两者都保存值,并且不查找其他变量是否具有相同的值。

因此,为它们分配了4字节内存,因为它们是不同的声明变量,简单地说是ABC。两个变量表示内存中的两个插槽。堆栈是在您输入方法时分配的,而不是在每行的基础上分配的。我们知道==运算符比较引用,如果引用相同的对象,则为true。如果内存插槽不同,==运算符在int情况下如何工作?==在使用原语时不比较引用,我们知道==运算符比较引用,如果引用相同的对象,则为真。那么==运算符在int情况下是如何工作的?@AyushN:在基元类型上,比较值。