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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不喝茶的陆羽 中级黑马   /  2013-5-15 16:25  /  2138 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 不喝茶的陆羽 于 2013-5-15 21:00 编辑

class Person
{
        private String name;
        private int age;
        Person(String name,int age)
        {
                this.name = name;
                this.age = age;
        }
        
        public boolean equals(Object obj)
        {

                if(!(obj instanceof Person))
                        return false;

                Person p = (Person)obj;
                //System.out.println(this.name+"....."+p.name);

                return this.name.equals(p.name) && this.age == p.age; //此处老师说equals是String类的name的String类重写方法,这个我可以理解,但是为什么后面 的age==能行啊?==不是比较地址吗?而因为对象都不是一个,那它们的age一定是存在不同象中啊,地址又怎么会一样呢?
        }

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

10 个回复

倒序浏览
回复 使用道具 举报
你听错了。equals是Object中的方法,因为java所有的类都继承Object。所有每个类都可以重写equals方法。
String是一个引用数据类型,不能使用==来进行比较。String s=""; s 表示指向 " " 在内存中开辟的空间。p的值就是一个地址值。
所有只能使用equals方法来判断。
int age;是基本数据类型 。他的变量代表的是,他所属的数据值。使用== 可以判断他们的值是否相等。
这就是引用数据类型和基本数据类型的其中一种区别。
我说的不是那么准确,这是我个人理解的。希望你能给个建议。。
回复 使用道具 举报
对于简单数据类型 如int long doule 或浮点行等数据类型的比较用==进行比较 是值比较,如果是String型的用==进行
比较比较的是这两个String型的值所在的地址 而用equals比较 是拿这两个 String型地址里的值进行比较

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
怎么2楼3楼说的完全不一样...麻烦谁来确定下...
2楼说:没有重写Object类中的equals方法,两对象比较时和==没有区别,不过==用的更广泛,它也可以比较基本类型,二equals只能比较对象,注意基本类型的包装类重写了Object的equals方法
3楼说:String是一个引用数据类型,不能使用==来进行比较。
还是我理解错了?
ps:三楼的“基本数据类型 。他的变量代表的是,他所属的数据值。使用== 可以判断他们的值是否相等。”这句准确吗?这个就是我要问的内容。
回复 使用道具 举报
String是引用数据类型,如果引用数据类型之间用==比较,就是比较的地址,因为在实际操作中,引用数据类型一般用来描述一些东西,比较他的地址通常是没有太大意义的,所以提供了equals方法,可以通过覆写的方式自定义比较方式,避免了局限性。
而基本数据类型一般封装的是具体的值,对于具体的值,我们一般就是比较他们谁大谁小,是否相等,所以基本数据类型就直接比较的是两个值,不涉及其他操作,用==即可。基本数据类型的==是根据基本数据类型在内存中的2进制大小来比较的。
以上是个人见解。。。
回复 使用道具 举报
二楼说的不严谨,不一定每个类都覆盖父类的equals方法,String也能用==来比较(比较的是地址罢了)
三楼的还可以,不过没听说过时简单数据类型,有基本数据类型和引用数据类型
equals方法是Object中的,String是覆盖了Object中的equals方法,比较的是引用所指向的String实例(就是字符串),当String类型用==来比就是比较的引用地址
至于age是int型用==当然比较的是值

回复 使用道具 举报
nihaoshitou 发表于 2013-5-15 16:45
对于简单数据类型 如int long doule 或浮点行等数据类型的比较用==进行比较 是值比较,如果是String型 ...

下次多说点,我好加分也能帮到楼主
回复 使用道具 举报
许智敏 发表于 2013-5-15 20:10
String是引用数据类型,如果引用数据类型之间用==比较,就是比较的地址,因为在实际操作中,引用数据类型一 ...

谢谢,说的很明白~
回复 使用道具 举报
曹睿翔 发表于 2013-5-15 20:27
二楼说的不严谨,不一定每个类都覆盖父类的equals方法,String也能用==来比较(比较的是地址罢了)
三楼的 ...

谢啦,你和楼上让我弄清楚了~
回复 使用道具 举报
基本数据类型用“==”比较是比较基本数据类型的值,而引用数据类型用“==”比较是比较对象的引用地址值。你这里的equals方法的意思就是:如果一个Person对象的name和age和另一个Person对象的name和age相同,那么这两个Person对象相等。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马