==是判断是否在同一个位置,equal是比较是否相同!

解决方案 »

  1.   

    我堆和栈搞不清楚!请大虾虾解释一下。  
    String    s=new  String  ("abc");  
    String    b=new  String  ("abc");  
    b.equals(s);这个结果是true  ;  
    b==s  这个结果是false;  
    我是这么理解的,new  一下就产生一个对象是在放在堆中。  
    因为刚刚这2句话String    s=new  String  ("abc");  
                               String    b=new  String  ("abc");调用是jdk  api  String  类的同一个构造函数所以在堆中分得内存大小一样所以对象比较一样。b.equals(s)返回TRUE  
    但是b==s是比较栈中的b和s  分的内存的大小,呵呵b和s植不同所以在栈分的大小不同。所以返回FALSE  
    但是这句柄和对象在堆和栈中是怎么联系的?一直在考虑中  
    还有就是异常的重写,不要把该考虑的问都考虑问题在写啊
      

  2.   

    我堆和栈搞不清楚!请大虾虾解释一下。  
    String    s=new  String  ("abc");  
    String    b=new  String  ("abc");  
    b.equals(s);这个结果是true  ;  
    b==s  这个结果是false;  
    我是这么理解的,new  一下就产生一个对象是在放在堆中。  
    因为刚刚这2句话String    s=new  String  ("abc");  
                               String    b=new  String  ("abc");调用是jdk  api  String  类的同一个构造函数所以在堆中分得内存大小一样所以对象比较一样。b.equals(s)返回TRUE  
    但是b==s是比较栈中的b和s  分的内存的大小,呵呵b和s植不同所以在栈分的大小不同。所以返回FALSE  
    但是这句柄和对象在堆和栈中是怎么联系的?一直在考虑中  
    还有就是异常的重写,不要把该考虑的问都考虑问题在写啊
      

  3.   

    equals()是重写了,Object类里面的equals()方法,用来比较引用的对象的字符串的值:
    b.equals(s)相当于比较"abc"和"abc"是不是相等的==是比较对象的HasCode,其实就是用来比较两个对象的引用是否一样;
    String  s=new String ("abc");
    String  b=new String ("abc");
    s,b分别指向了两个对象,所以用==比较的结果肯定是false
    如果是这样:String  s=new String ("abc");String  b=a;
    那b==s 这个结果是true;
      

  4.   

    堆是用了放置object的没错,但是和equals没关系, 如果string实现equals是
    public boolean equals(Object o) {
    return true;
    }
    哪怎样都是相等的.
      

  5.   

    内存大小是否相同也和JVM的实现有关, 不能一概而论.
      

  6.   

    jFresH_MaN()"\\r\\n"(做人挺厚道的说) 
    String  s=new String ("abc");String  b=s;
    我觉得是这样的 只不过把栈中地址指向b了。
    是这样了吗?
    你能给我讲讲 对象在复制过程中在堆中是如何处理的。
    s 这个句柄是如何指向这个new String("abc");对象
    大哥我比较水。麻烦了
      

  7.   

    kenli(心相续) 
    大哥 你不是重写 这个方法了吗?
    你怎么知道那是句柄就知道对应这个对象呢?
      

  8.   

    你一直说栈,堆什么的
    我觉得真的没什么关系,那只是数据在内存中的存贮位置罢了你能给我讲讲 对象在复制过程中在堆中是如何处理的。
    s 这个句柄是如何指向这个new String("abc");对象
    大哥我比较水。麻烦了
    -----------------------------------------
    句柄指向对象是通过Object类的hashCode()实现的,
    如果两个所谓句柄如果指向的对象是一样的话他们的hashCode就是一样的
    ==比较也就是比较他们的hashCode
      

  9.   

    句柄指向对象是通过Object类的hashCode()实现的,
    如果两个所谓句柄如果指向的对象是一样的话他们的hashCode就是一样的
    ==比较也就是比较他们的hashCode
    -----------------------------------------------------------------------------------------
    public class Text_object{
    String s,b;
    public Text_object(){
    s=new String("test");
    b=new String("test");
    System.out.println(b==s);
    System.out.println(b.equals(s));
    System.out.println(b.hashcode());
    System.out.println(s.hashcode());}
    public Text_object(String t){
    s=new String("test");
    b=s;
    System.out.println(t);
    System.out.println(b==s);
    System.out.println(b.equals(s));
    System.out.println(b.hashcode());
    System.out.println(s.hashcode());
    }
    public static void main(String args[]){
    new Text_object("this is test a hashcod");
    new Text_object();
    }
    }
    大哥 我回去做了实验了,看了hashcode的文档。 如果 一个类的object相等hashcode值也一样,而你说的==是比较他们的hashcode是错误的。