如何在Java中获取任何原始数据类型变量和字符串变量或引用的地址?

时间:2015-08-23 06:39:51

标签: java

我想检查不可变字符串变量如何只存储一个地址位置。

例如,

String s1="welcome"
String s2="welcome"

然后s1和s2引用相同的一个字符串“welcome”存储地址。

2 个答案:

答案 0 :(得分:2)

字符串池是Heap的内存区域,其中所有字符串都由java虚拟机定位。

在String池中,还有另一小部分内存用于存储String常量或文字。因此,String常量池是堆空间中String池的子集。

考虑以下示例,

String cPoolStr1 = "Hello";
String cPoolStr2 = "Hello";
String sPoolStr1 = new String("Hello");
String sPoolStr2 = new String("Hello");

要检查两者是否指向同一地址,您将获得true cPoolStr1 == cPoolStr2,其中会比较文字的参考。

enter image description here

答案 1 :(得分:0)

字符串文字存储在公共池中。通常是堆的一部分。

其次,不能在Java中获取Object的地址。它会随着时间的推移而改变。

但是,您可以检查两个对象的哈希码,以查看他们在给定时间点共享相同地址的天气。

System.out.println(s1.hashCode()+" ** " +s2.hashCode());

hashcode() method

的位置
  

(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要此实现技术。)

给出答案:How can a string be initialized using " "?