我知道局部变量存储在java中的堆栈中。但是当两个int变量在java中给出相同的值时,堆栈上的内存分配会发生什么(它们如何相关)?写语义是否有任何副本?它是如何运作的?
答案 0 :(得分:4)
显而易见的答案是,ul { height: 95%; }
与int x=5; int y=5;
的效果相同,而仅例外情况是,在您的情况下,与相关联的内存int x=5; int y=6;
与y
的内容相同。
很难设想使用某种拷贝写语义的JVM - 即x
和x
被分配到同一块内存中直到其中一个更改了值。据我所知,这是Java语言规范允许的理论上的,但它不太可能被像y
那样微不足道的事情所使用:设置的开销写入时的副本将远超过他们从一开始就拥有不同的内存。
(出于兴趣,可以为C ++ int
类编写copy-on-write语义,但是从C ++ 11开始就不允许这样做。
答案 1 :(得分:0)
它肯定会在堆栈中创建变量。持有价值5。 别无他法。
任何变量local / global,primitive / non-primitive都存储一些值
原始值是根据类型分配的一些内容。
对于非原始值,是堆中对象的内存地址,但最后两者都保存值,如果其他一些var具有相同的方式,则不会查找。