A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

程序:
import java.util.*;

class MyTestArratList
{
        public static void main(String[] args)
        {
                ArrayList al=new ArrayList();
                al.add("java1");
                al.add("java2");
                al.add("java3");
                al.add("java4");
                al.add("java1");

                Iterator it=al.iterator();
                ArrayList newAl=new ArrayList();
                while(it.hasNext())
                {
                        Object obj=it.next();
                        if(!newAl.contains(obj))
                        {
                                newAl.add(obj);
       
                                System.out.println(obj);
                        }
                               
                }
        }
}
请问if语句contains方法调用的String类中的equals方法还是Object类中的equals方法呢?

2 个回复

倒序浏览
调用的是String中的equals方法!!
因为it.next()取出的是String对象,此对象覆盖了父类Object中的equals方法,根据java面向对象的多态特性,
以及set.contains(Object o)方法根据set中的每个元素e的e.equals(o)的值返回相应的真假值,例子中,每个e均为String类对象,虽然o被指为Objdect对象,但并没有进行Object的强制转换,根据多态性,o被加入到集合中后,在下次比较调用它的equals方法时调用的仍是String中的euqals方法。
回复 使用道具 举报
学习了,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马