equals方法是Object类中的方法,但在String类中被重写了,所以它的用法又有些区别。
1.如果比较的变量时String类型的,他所比较的是两个变量的内容,若内容相同则返回值为true,若不同则为false。
2.若是其他类型的话,比较的事两个引用变量是否同为某个对象,若是则返回值为true,不是则为false。
注意:equals方法他只能比较引用类型的变量==:在基本数据类型中,他比较的是两个变量的内容是否相同;
       在引用数据类型中,他比较的是两个变量的内存地址是否相同。

解决方案 »

  1.   

    不同类equals方法都应该重写的。
      

  2.   

    Integer a=100;
    Integer b=100;
    (a==b)==true;
    Integer c=200;
    Integer d=200;
    (c==d)==false;
      

  3.   


    你这个也太片面了.任何一个类可以重写它的equals方法 来按照自己的意愿进行比较,我什么不比较直接返回true 也是可以的。
      

  4.   

    引用类型的:没有重写equals()的,全部都是比较内存地址。
    重写equals()的,就看你怎么写了判断规则了。
      

  5.   

    重写equals方法时,可以使用==来提高效率;
    可以用以下步骤得到一个实现良好的equals方法
    1.判断参数是是否为空
    2.判断参数是否指向相同引用
    3.判断参数是否通过instanceof测试
    4.再比较各变量的值.(易变化部分先比较)
    public Boolean equals(Object o){
        if(null == o){
            return false;
        }
        if(this == 0){
            return ture;
        }
        if(o instanceof this.Class){
            //强制转化为本类型
             //比较各变量的值
        }
    }
      

  6.   

    1. String 类型比较特殊, 同样内容的字符串如果不是使用new实例化出来, 那么就指向同一片内存地址.
    比如String s1 = "test"; String s2 = "test"; 这两个变量s1和s2, 不管内容和地址都相同, 所以导致了它们完全相等, 使用==或equals都完全一致. 2. 其他类型的话, 比如新写的类, 如果需要进行比较, 一般都会重写equals方法的, 否则就直接比较是否为同一对象, 因为所有类都继承自Object, 而Object的equals方法是直接用的==.
      

  7.   

    重写equals()方法的时候记得重写hashcode()方法
      

  8.   

    重写equals()方法的时候记得重写hashcode()方法
      

  9.   

    在String的比较上 equals和==效果是一样的,在其他Object子类的比较上,==只是比较引用的值是否是相同的。equals比较的是引用指向的对象时都相同
      

  10.   

    在String的比较上 equals和==效果是一样的,在其他Object子类的比较上,==只是比较引用的值是否是相同的。equals比较的是引用指向的对象时都相同
      

  11.   

    在String的比较上equals和==效果是不一样的,在其它Object子类的比较上效果是一样的。
    具体还是要看是否方法被重写过。
      

  12.   


    被你发现了...我写错了..是 this == o;
    想表达的意思是..当前引用与o这个引用指向同个对象...
      

  13.   

    equals 验证字符串是否相等
    ==验证数值是否相等我大部分是这么用的。。
      

  14.   

    默认时equals跟==一样 任何两个不同的引用类型都不会互相equals 所以需要重写equals方法 String类就是因为重写了equals方法才能比较两个引用类型(所new出的字符串)是否相等
      

  15.   

    很多类的equals都重写了··不一定只有String
      

  16.   

    要用HashSet添加自己的对象时势必要自己重写equals方法的。
      

  17.   

    楼主说的很对,我谈谈我的理解吧
    ==对于基本类型,看其变量值是否相等,对于引用类型,看其是否为同一个对象
    equals方法是Object类的方法,任何类都可以重写这个方法,对于String类来说,equals比较的是两个字符串对象的字符序列是否完全一致,所以对于==相比是true的话,equals相比必然是true,==相比是false的话,equals相比也有可能是true,如下面的例子
     
    str1=new String("abc");
    strl=new String("abc");str1==str2 结果:false 因为通过new 必然会产生新的对象,所以结果为false
    str1.equals(str2) 结果:true下面的例子展示了String 的一个特点str1="abc";
    str2="abc";str1==str2 结果:true 因为这回不是通过new 来产生的String,所以str1="abc",java会检查缓存中是否存在"abc",如果存在直接让str1引用"abc"对象,如果不存在会建一个“abc"对象放在缓存中,当执行str2="abc";时,java还是要检查缓存,和上面的步骤一样,所以就会产生str1==str2为true的结果
    str1.equals(str2) 结果:true
      

  18.   

    麻烦那个高手给我说下,下边这个程序的各个值是怎么来的
    public class Test{

    String aa = "";

    Test(String a){
    aa = a;
    }

    public static void main(String args[]){
    String t1 = "test";
    String t2 = "test";

    System.out.println(t1 == t2);
    System.out.println(t1.equals(t2));

    System.out.println("\n==============\n");

    Test test1 = new Test("abc");
    Test test2 = new Test("abc");

    System.out.println(test1.aa == test2.aa);
    System.out.println(test1.aa.equals(test2.aa));

    System.out.println("\n==============\n");

    System.out.println(test1 == test2);
    System.out.println(test1.equals(test2));
    }
    }