c:
int *p;
int i;
p=&i;
printf("%d",p);
java呢?(就是那个“引用地址”)

解决方案 »

  1.   

    Object类的
    hashCode()
    toString()
      

  2.   

    樓主,java里面應該是看不了的,因為java沒有了指針操作
      

  3.   

    这是STRING的:
        public int hashCode() {
    int h = hash;
    if (h == 0) {
        int off = offset;
        char val[] = value;
        int len = count;            for (int i = 0; i < len; i++) {
                    h = 31*h + val[off++];
                }
                hash = h;
            }
            return h;
        }这应该不是地址吧   我的目的是想看2个对象是不是在同一个地址上  有没办法啊
      

  4.   

    都用JAVA了 还考虑社么指针问题~~返老还童啊-.-
      

  5.   

    不知道楼主想要干什么?
    ----------------------------------------------------------------
    public class StringTest { 
      public static void changeStr(String str){ 
        str="bbb"; 
        if (str== ???)   //这里我想跟main函数里的String str做个==比较,这句要怎么写??
    我只想干这个 
            System.out.println("==");
      }   public static void main(String[] args) { 
        String str="aaa"; 
        changeStr(str); 
        System.out.println(str); 
      } 
    }
      

  6.   

    和main的比,不可能为true把 ,应该怎么比都是false
      

  7.   

    ==比较的就是对象的地址。你不知道吗?
    -----------------------------------
    SB, 拜托看清楚代码再讲:if (str== ???)   //这里我想跟main函数里的String str做个==比较
      

  8.   

    首先,你应当搞清楚的是,Java里面的String是不可变的。就是说,当你在main里面把“aaa”赋值给str以后,再在changeStr里面把“bbb”赋值给str,虚拟机就又隐式的创建了一个String,并把你的str引用连接到了新的String。原来的那个“aaa”就已经丢弃了,由JVM负责回收销毁。然后,如果你想比较2个对象的地址,直接用==就完了。a==b,地址相等则是true,就这么简单。至于怎么看指针地址,我也不清楚toString()出来的是不是,但是在Java里面完全没必要,抛弃指针,不然你不如用C++。
      

  9.   

    学Java,就要学会用Java语言来思考问题,如果只是想把Java用作一个C++思想的表达工具,那可能会非常别扭,会搞得自己很糊涂。
      

  10.   

    ==比较的就是对象的地址。你不知道吗?
    -----------------------------------
    SB, 拜托看清楚代码再讲:if (str== ???) //这里我想跟main函数里的String str做个==比较
    =============================================================
    楼主,你基本的编程都不懂啊,你把被比较对象作为参数传进来,怎么比较?就是在C里面也是要这样啊,除非你用全局变量,你怎么不开窍呢?稍微转一下不就行了。
    public class StringTest {
    public static void changeStr(String str){
    String str2=str;
    String str="bbb";
    if (str==str2){
        System.out.println("==");
    }
    }
    public static void main(String[] args) {
    String str="aaa";
    changeStr(str);
    System.out.println(str);
    }
    }
    还有,java里引用和c语言里面的指针概念是等价的。看来学你是刚学java吧,许多东西需要习惯的。java里面的引用虽然和c语言指针是等价的,但是它是不可计算的指针,只能进行相等和不等比较,不能进行加减运算。另外在无法获得引用的物理内存地址,虽然它在内存有实际映象。
      

  11.   

    >>SB, 拜托看清楚代码再讲:
    >>if (str== ???) //这里我想跟main函数里的String str做个==比较拜托你用脑子想清楚再讲。
    不要总以SB的方式透露你对两种语言的无知。
      

  12.   

    另外在无法获得引用的物理内存地址,虽然它在内存有实际映象。
    ---------------
    这就够了  我不需要他的物理内存  实际上C的也是windows的虚拟内存映射   
    我只是想看他究竟在内存里的映射地址  
    public static void changeStr(String str){
    String str2=str;
    String str="bbb";
    if (str==str2){这个早就想过了,可是  总不能老这样加个临时的吧  怪别扭的
      

  13.   

    要这么说的话,也只好说“C语言确实有它方便的地方。”
    Java中Object类的hashCode方法一般情况下倒是可以保证让不同的对象返回不同的值,于是可以当个ID性质的东西来用用,但那也只是一般的语言实现者的作法,并非Java语言本身的硬性要求。
    而且,Object.hashCode是可以被重载的,所以即使Object中那样做的,派生类中也仍然不一定。
      

  14.   

    另外,在Eclipse中调试Java程序时,可以从Variables窗口中观察对象的ID。
    (我用的是Sun自己的JDK,不清楚其它厂商的实现是否也会让每个对象实际拥有一个ID)
      

  15.   

    于是可以当个ID性质的东西来用用
    ------------------------
    要是真的是ID也可以  
                for (int i = 0; i < len; i++) {
                    h = 31*h + val[off++];
                }
                hash = h;可是这个。。 这个连叫ID的资格都米有