有什么方法可以比较java中两个int
的内存位置吗?
int x = 25;
int y = 25;
我想检查并证明这两个变量是引用了相同的值,还是创建了两次。
x == y
上面一行比较了文字值,这不是我想要的。知道吗?
虽然这与代码无关,但您可以查看代码片段生成的字节码。
0: bipush 25
2: istore_1
3: bipush 25
5: istore_2
6: return
看到bipush
被调用了两次,就会出现两次堆栈分配。不过,稍后很可能会进行优化。
你想要的是不可能的。
Java中的基元值就是:基元值。它们的"定义"中没有任何内容与内存位置有关。
不过,javac编译器将进行常量折叠,当然,如果您有问题的话,jit将在运行时应用各种优化。但是,对于基元值,您无法获得"内存布局"。即使是*com.misc.Unsafe"和VarHandle的东西也只处理引用类型。