每次我运行这个程序我要显示内存地址时,它总是输出相同的结果:
public static void main(String[] args) throws InterruptedException {
String foo = "a";
String foo2 = "a";
System.out.println(Integer.toHexString(foo.hashCode()));
System.out.println(Integer.toHexString(foo2.hashCode()));
foo = "a";
foo2 = "a";
System.out.println(System.identityHashCode(foo));
System.out.println(System.identityHashCode(foo2));
Thread.sleep(1000000);
}
这样做的目的是我在Streams和Imperative风格之间进行一些性能测试。所以我想知道这个值是否为缓存,并确定我是否应该重启我的电脑或通过JConsole / JvisualVm手动运行垃圾收集。
答案 0 :(得分:-1)
String foo2 = "a";
可以重用字符串常量池中的实例(如果有)。
System.out.println(foo==foo2);
两个引用类型上的 ==
是引用标识比较。两个等于的对象不一定是==
输出true
表示 foo , foo2 引用相同的内存。
相关问题
How do I compare strings in Java?
What is the difference between “text” and new String(“text”)?
答案 1 :(得分:-1)
如果要查找对象的内存位置,可以使用 sun.misc.Unsafe 。但我不会在现实生活中使用这种方法。只是出于好奇:)
此处说明如何执行此操作:How can I get the memory location of a object in java?
顺便说一句。 Object.hashCode()返回随机数。默认情况下,它将使用Lehmer随机数生成器。