java中怎么获取变量的地址,比如 int a=5;我如何打印出a的地址?

解决方案 »

  1.   

    a 的地址不属于 java 的范畴。
      

  2.   

    Java好像没这方面的功能,而且好像在极力避免这件事!
      

  3.   

    java的一大特点是取消了程序员直接操作指针,所以即使你拿到了地址也没用
      

  4.   

    JAVA里程序员虽然不能直接操作指针,但是JAVA里到处都是引用(指针) 你不能操作他 但是必须理解内存
      

  5.   

    Integer.toHexString(super.hashCode())
    就是调用Object的hashCode可以得到对象的地址。
    基本类型和字符串池地就不知道了。
    不过拿到了能干什么呢?
      

  6.   

    hashCode 只是一个标识,跟内存位置一点关系都没有。况且基本型别连 hashCode 都没有,不也照样有个地址?
      

  7.   

    一般都不会用到变量的地址,在JAVA中
      

  8.   

    JAVA没有这方面的东西吧。。持续关注中!!!
      

  9.   

    Java不允许程序员管理内存,内存地址对Java程序员来说是透明的,无意义的。
      

  10.   

    基本类型是存在栈中的,java无法获取其地址
      

  11.   

    hashCode 只是一个标识,跟内在位置没关系
      

  12.   

    no way! java不支持这个,是隐藏的。不会让你直接看到的。
      

  13.   

    InetAddress localhost = InetAddress.getLocalHost(); 
    System.out.println ("localhost: "+localhost.getHostAddress()); 
    System.out.println ("localhost: "+localhost.getHostName());
      

  14.   

    其实这正是c和Java的区别,c中必须明白指针的地址,而java中则是避免了这个问题,不用程序员特地操作
      

  15.   

    JAVA中不可能打印出地址,因为它禁止了对内存的访问,不可能获得地址。
      

  16.   

    JAVA纯面向对象估计就体现在不能获得内存地址吧
      

  17.   

    比较困难,生成javacore,然后去找吧。
      

  18.   

    但是有一种方法可以比较String和StringBuffer的变量在内容改变后的是不一样的:
    代码如下:
     String str1="学海无涯苦作舟";
                    System.out.println("String 的 str1的hascode"+str1.hashCode());
                    str1=str1+"人间正道是沧桑";      //注意此str1的存储地址已发生变化
                     System.out.println("String 的 str1的hascode"+str1.hashCode());
                    System.out.println(str1);
                    StringBuffer sb1=new StringBuffer("弟子规");
                      System.out.println("StringBuffer 的 hascode:"+sb1.hashCode());
                    StringBuffer sb2=sb1.append("圣人教");    //注意sb1和sb2指向同一个地址
                       System.out.println("添加字符串后StringBuffer 的 hascode:"+sb2.hashCode());
                    sb2.insert(6,"海纳百川");
                    System.out.println("sb1="+sb1);
                    System.out.println("sb2="+sb2);
      运行结果:
    String 的 str1的hascode-2054942391
    String 的 str1的hascode895667206
    学海无涯苦作舟人间正道是沧桑
    StringBuffer 的 hascode:26954214
    添加字符串后StringBuffer 的 hascode:26954214
    sb1=弟子规圣人教海纳百川
    sb2=弟子规圣人教海纳百川
    弟子规圣人教海纳百川2.718281828459045

    可以看出str1的前后hascode值变了,而sb2的值没有改变
      

  19.   

    需要注意的是hascode 不能与堆栈中的内存地址等价理解,我认为变量的tohexstring()方法可以替代内存地址理解
      

  20.   

    一句话,java无法直接获取变量或对象的地址值。
      

  21.   


    hashCode 看起来象地址,所以某些人就干脆把它当作地址了
      

  22.   

    hashCode都可以复写,内存怎么办?
      

  23.   

    java 指针不是只在内部存在,对外没有表现吗?
      

  24.   

    是否可以将其转换为Object类型。改写toString()方法,看能不能得到.菜鸟,呵呵!
      

  25.   

    如果想玩内存和指针的话,你应该去学习C而不是java。
      

  26.   

    楼主不是搞java 的吧 如果是 应该知道这是不行的 
      

  27.   

    以前学C, 刚接触java。求教:
    byte a = (byte)0x01;
    byte b = (byte)0x02;
    char c = (char)a;
    强制转换后c=?
    java的强制转换是怎样实现的,在C里如果a,b地址连续,c读出的值可能是0x0102.在java里我想测试一下,测试后的结果是0x01。所以我想得到a,b的地址看他们是不是连续的。
      

  28.   

    已经回复了你的帖子
    http://topic.csdn.net/u/20120426/12/b8e02f1a-da8a-418c-8b9a-0f2d5cb4b90f.html
      

  29.   

    肯定是无法取到的,亲~~~java不管理直接对内存进行管理
    不要相信hashCode,这函数压根就是可以自己重载,和地址没有关点关系
      

  30.   

    此贴必火啊
    LZ以前是学C的啵