class Value {
  int i;
}public class EqualsMethod2 {
  public static void main(String[] args) {
    Value v1 = new Value();
    Value v2 = new Value();
    v1.i = v2.i = 100;
    System.out.println(v1.equals(v2));
  }
} ///:~
为什么返回是false啊
不明白

解决方案 »

  1.   

    哈哈,是ThinkInJava上的吧。我也是不明白。不过网上一朋友说那2个引用的对象的内容并不一样,只是内容的值一样。我还是不明白。。
      

  2.   

    equals() 方法是Object的方法,在object中实现过程如下;
    boolean equals(Object o){ 
     return this==o; 

    object对象默认使用了==操作符,在Value类中:定义的是
    class Value
    {
       int i;
    }
    没有对object中的equals()进行覆盖,所以使用equals和
    使用==会得到同样的结果
    而使用String等类时,他们复写了equals()方法。
    下面是API里面的原句
    equals
    public boolean equals(Object anObject)比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的 String 对象时,结果才为 true。 覆盖:
    类 Object 中的 equals
    参数:
    anObject - 与此 String 进行比较的对象。 
    返回:
    如果 String 相等,则返回 true;否则返回 false。所以在使用equals()时,我们不能简单的用equals()判断两个类的内容是否相等, 这个答案要看类创建时有没有覆盖equals(),根据新的equals()来判断结果
      

  3.   

    源代码
        public boolean equals(Object obj) {
    return (this == obj);
        }实际是用==在比较问题其实很简单。
    首先。你要明白“==”之间比的是什么
    “==”在比较对象时。其实是在判断两个对象是否是相同的空间地址   Value v1 = new Value();
        Value v2 = new Value();
        v1.i = v2.i = 100;
        System.out.println(v1.equals(v2));v1申请的是一块新空间
    v2申请的也是块新空间
    虽然他们的i成员变量值相等。但始终地址不等
    v1.i = v2.i = 100;so
    System.out.println(v1.equals(v2));返回false;
      

  4.   

    注意比较的是 v1和v2 而不是 v1.i和v2.i
      

  5.   

    对,Object.equals()是比较对象是否是同一对象(String中覆盖了equals方法,比较对象的值)
      

  6.   

    两个对象比较搞死了也是false.(比的是内存地址,不是内容)
    就象我跟你:你是你,我是我.You not equal me.
    :)
      

  7.   

    对象的Equals方法默认的是比较Hashcode 如果重写equals方法就可以由自己定义了.
    你上面的例子中, 虽然两个对象拥有相同的值, 但是在内存中是互相独立的.所以不相同
      

  8.   

    equals方法用来比较同类型对象之间的关系,这种关系你可以自己去定义:什么时候认为两个对象是相同的,什么时候认为不相同。这取决于实际需要,返回的也不一定就是true或false,你也可让它返回一句话,或是一个数字。在java里所有的预定义可以用equals方法比较的对象都会扩展Serializable接口,为什么扩展?为了符合序列化规则。这里说太麻烦,你去看看文档吧。所以你在自定义类的时候如果需要的话也可以扩展,当如果是继承了已经扩展了Serializable接口的类,就不需要再扩展了。在定义你自己的equals方法的时候可能还要处理另一个方法:hashCode,如果要使两个作比较的东西即认为在逻辑上相同,也认为他们就是一个对象的话,你要让这两个东西拥有同一个hashCode,至于equals方法里面你要比较什么内容根据实际需要确定。我想说到这里你该明白了吧,你新建的两个对象有两个hash码所以你在用==作比较的时候结果会是false,你把两个对象的hash码改成一个然后你再试试,呵呵。
      

  9.   

    我已经定义了name="manage"
    if(rs.next()){
            //取得用户名和密码
            
            String nameData = new String(rs.getString(1));
            System.out.println(rs.getString(1));
            String passwordData = rs.getString(2);
            System.out.println(rs.getString(1));//输出manage
            state=rs.getInt(3);
            //检查用户名和密码的大小
             System.out.println(state==0);
     System.out.println(name.equals(rs.getString(1))); //问题是在这里为什么会是false
             System.out.println(nameData+":::"+name);  输出manage:::manageSystem.out.println(name.equals(rs.getString(1))); //问题是在这里为什么会是false,难道数据库读出来的东西和外面不一样吗?真的搞不懂啊
    真的郁闷啊!