java中的equals()方法和"=="?

    在写java程序时往往要遇到判断两个实例是否相等的问题,那么Object中的equals(Object),到底比较的是两个实例中的什么呢?我认为他们比较的是创建实例时所深成的hashCode,(可是我的直觉认为不是这样的),如下:
    class Test {
        public String name;
     }

    Test t = new Test();
    t.name = "hello";
    Test two = new Test();
    two.name = "hello";

    其中t.equals(two) 和  t == two 返回的都是false,(其中t和two这两个实例所生成的hashCode是不相同的)

    而对如下:
    String st = "hello";
    String str = new String("hello");
    其中str.equals(str)和st == str返回的分别是true和false (其中st和str这两个实例所生成的hashCode是相同的)

    这里我有一个问题,在什么情况下"=="才成立?以前我认为两个实例的hashCode向同这两个实例就成立了,可是上面的例子已经证明了不成立了。 那到底什么情况下"=="才成立呢?(不要告诉我,他们的条件是要在同一个实例的情况下,那我就倒!!!!!)

    那不同的实例与hashCode有什么样的关系呢?
posted on 2006-06-26 16:35 小桥 流水 阅读(528) 评论(2)  编辑  收藏 所属分类: java

评论

# re: java中的equals()方法和"=="? 2006-12-27 16:58 hdwt  回复  更多评论   

先说一下基本类型和非自己创建的基本类型对象的==的作用,其他的我没有测试所以我不敢随便说.
如果是基本数据类型:int ,float,long,double,byte,char
例如:int a = 10;
int b = 10;
System.out.println(a==b);
输出都是true
------------------------------------------------
如果是对象比较 Integer c = new Integer(10);
Integer d = new Integer(10);
System.out.println(c==d);
那么输出是false
------------------------------------------------
如果是基本类型和对象(仅限于基本类类型的对象,Integer,Float,等等)
float f1 = 4.2f;
Float f2 = new Float(4.2f);
System.out.println(f1==f2);
那么输出是true

# re: java中的equals()方法和"=="? 2006-12-27 17:03 hdwt  回复  更多评论   

对于String类型则另当别论,因为涉及到内存节约的问题.在良葛格的<java学习笔记>一书中,有较的介绍.

只有注册用户登录后才能发表评论。


网站导航: