JAVA的对象内存地址好像获得不了...
JAVA又不能操作内存
要地址干嘛?
每个对象都内部有个唯一标识(虚拟机的伪地址)

解决方案 »

  1.   

    JVM是不会让程序员知道对象所在的内存地址的,为了安全吧,JAVA毕竟不是汇编啊。但是可以借助别的工具,比如OLLYDBG还有Cheat Engine,用的比较多的就是这两款了
      

  2.   

    直接用对象的hashcode(),因为hashcode从某种程度上说标示的就是对象的内存地址。
      

  3.   


    -1hashCode只是和地址有一定关系,但绝不等于地址! 
      

  4.   

    HashCode不是内存地址,是根据排列算出来的一个值,相当于对象的身份证,但绝不是内存地址,大家一定要注意这个误区。下面我用简单的代码来证明
    import java.util.ArrayList;
    import java.util.List;public class Prove
    {
    public static void main(String[] args)
    {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < 3000; i++)
    {
    Prove p = new Prove();
    if (!list.contains(p.hashCode()))
    list.add(p.hashCode());
    }
    System.out.println(list.size());
    }
    }
    我生成了3000个Prove对象,应该新分配3000个内存地址,最后却只有2998个hashCode
      

  5.   

    java获取底层的东西,似乎要借助其他的程序吧
      

  6.   

    java不能操作内存
    只有hashcode和内存地址无关
      

  7.   

    我现在想做的一件事情为:了解JVM中映射表的原理,通过对象的ID值寻找到对象保存在内存中的物理地址。谢谢!
      

  8.   

    java 不能直接访问内存,所以你得不到对象的内存地址,并且就算你得到了也没什么用
      

  9.   

    java逆向工程
    -------------------------------
     java菜鸟学堂QQ群144648357
      

  10.   

    获取不到内存地址。java获取到内存地址没实际意义。
      

  11.   

    获取不到内存地址。java获取到内存地址没实际意义。
      

  12.   

    System.out.println(类对象)这样行吗?
    这个输出的不就是个地址码吗?
      

  13.   

    java优点就是不用关心内存管理等一些复杂的内容。
    JAVA中获得内存地址没有必要,因为没有一些内存相关的操作
      

  14.   

    System.out.println(对象)这样的语句输出的不是对象的地址,虽然它看起来象。其实这条语句相当于:
    System.out.println(对象.toString());这里的 toString() 方法是在所有类的基类 Object 中定义的,它的源代码如下:
        public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }也就是说,如果一个类没有重写 Object.toString() 方法,那么打印语句得到的都将是:类名+"@"+十六进制表示的对象的哈希值
      

  15.   

    确实是获取不到的,并且hashCode与内存地址是没有关系的
      

  16.   

      String a = new String("abc");
      String b = new String("abc");
      System.out.println( a == b );    //false
      System.out.println( a.equals(b) );  //true
      System.out.println( a.hashCode() == b.hashCode() );  //true
    a和b的内存地址肯定是不同的,但是其hashcode却一样
      

  17.   

    jdk说明:
    String的hashCode函数。当然不同的对象有不同的hashCode函数,如果override了Object类的hashCode的话。
    hashCode
    public int hashCode()Returns a hash code for this string. The hash code for a String object is computed as 
     s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
     using int arithmetic, where s[i] is the ith character of the string, n is the length of the string, and ^ indicates exponentiation. (The hash value of the empty string is zero.) Overrides:
    hashCode in class Object 
    Returns:
    a hash code value for this object.
    See Also:
    Object.equals(java.lang.Object), System.identityHashCode(java.lang.Object)
    hashCode的值跟内存地址有关,但是也有冲突的时候。
    貌似有jmap之后在jhat可以看到地址,不太清楚。
      

  18.   

    object对象的hash就是地址,楼上有测试的朋友,输出2998和3000都是对的,输出2998是因为有两个对象被回收了,回收的空间又被重利用了。还有一个用new string的朋友是因为string重写了hashcode方法