在Python中,可以通过id()方法来获取变量所指向的内存空间的内存空间
class Bookstore:
def __init__(self,Bookname,price):
self.Bookname=Bookname
self.price=price
print("书名为:"+Bookname+"\t价格为:"+str(price)+"元")
prac1=Bookstore("Java程序设计",39.8)
print(prac1.Bookname)
print(prac1.price)
print(id(prac1))
print(id(prac1.Bookname))
print(id(prac1.price))
结果:
书名为:Java程序设计 价格为:39.8元
Java程序设计
39.8
41984128
42632000
4661968
但是在Java中不能直接获取变量所对应的内存地址,因为java中的堆空间、栈空间由JVM虚拟机控制,而JVM对于物理内存地址是"不可见的",所以说直接输出变量时可能会看到一长串字符,但是他不是真正的内存地址
而java中自带的hashCode()方法可以返回JVM中地址的哈希码,
System.out.println(objname.HashCode()) 或者 System.out.println(HashCode(objname))
Hash码表示了该对象在Java虚拟机中的内存位置(注意:不是内存地址),JVM会根据该Hash码在真正的堆空间中给该对象分配一个内存地址
class demo {
int age;
String name;
public void introduce(){
System.out.println(name);
System.out.println(name.hashCode()); //获取变量的哈希值,不能直接获取对象的内存地址
}
}
public class Hash{
public static void main(String args[]){
demo hash=new demo();
hash.name="variable";
hash.introduce();
}
}
结果:
variable
-1249586564
所以说,在java中获取对象的内存地址是不现实的,如果在调试过程中,看见一个类或方法中有很长的一串字符,那就是内存地址,但他不是真正的内存地址