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

时间:2016-10-03 12:07:03

标签: java

我知道局部变量存储在java中的堆栈中。但是当两个int变量在java中给出相同的值时,堆栈上的内存分配会发生什么(它们如何相关)?写语义是否有任何副本?它是如何运作的?

2 个答案:

答案 0 :(得分:4)

显而易见的答案是,ul { height: 95%; } int x=5; int y=5;的效果相同,而例外情况是,在您的情况下,与相关联的内存int x=5; int y=6;y的内容相同。

很难设想使用某种拷贝写语义的JVM - 即xx被分配到同一块内存中直到其中一个更改了值。据我所知,这是Java语言规范允许的理论上的,但它不太可能被像y那样微不足道的事情所使用:设置的开销写入时的副本将超过他们从一开始就拥有不同的内存。

(出于兴趣,可以为C ++ int类编写copy-on-write语义,但是从C ++ 11开始就不允许这样做。

答案 1 :(得分:0)

它肯定会在堆栈中创建变量。持有价值5。 别无他法。

任何变量local / global,primitive / non-primitive都存储一些值

原始值是根据类型分配的一些内容。

对于非原始值,是堆中对象的内存地址,但最后两者都保存值,如果其他一些var具有相同的方式,则不会查找。