java -Object :equals()、tostring()

1 Object类的简介

1)在Java类继承结构中,java.lang.Object类位于顶端;

2)如果定义一个Java类时没有使用extents关键字声明其父类,则其父类默认为java.lang.Object类;

3)Object类型的引用变量可以指向任何类型对象。

2 重写Object类的toString方法

方法简介:

Object类中的重要方法,用于返回对象值的字符串表示

toString方法不重写时的状况:

1)Java语言中很多地方会默认调用对象的toString方法:

例如:System.out.println(任意对象),直接调用toString方法

2)如果不重写toString方法,将使用Object的toString方法,其调用后的返回值为:

类名@散列码

toString方法重写的原因:

1)toString方法是非常有用的调试工具;

2)JDK中的标准类库中,许多类都定义了toString方法,方便用户获得有关对象状态的必要信息;

3)强烈建议为自定义的每个类都增加toString方法。

4)原则上建议重写,重写的格式大多数遵循”类的名字[域值]”。

Demo:

public class Person {

private String name;

private int age;

public Person(String name,int age){

this.name = name;

this.age = age;

}

//重写toString方法,格式:类名+N个属性值

public String toString(){

return "className="+this.getClass().getName()+";

          name="+this.name+";

           age="+this.age;

}

public static void main(String[] args) {

Person p = new Person("hong",21);

System.out .println(p.toString());

}

}

输出值是:

className=com.example.objects.Person; name=hong; age=21

如果不重写toString方法:输出值是:

com.example.objects.Person@7852e922

3 重写Object类的equals方法

简介:

这个方法判断两个对象是否具有相同的引用,即是否为相同的对象;

重写equals方法的意义:

重写该方法,通过比较对象的成员属性,使该方法更有意义。

实例:

package com.example.objects;

public class Person {

private String name;

private int age;

public Person(String name,int age){

this.name = name;

this.age = age;

}

//重写toString方法,格式:类名+N个属性值

public String toString(){

return"className="+this.getClass().getName()+"; name="+this.name+"; age="+this.age;

}

//重写equals方法,关键看斜边的第三个if

public boolean equals(Object obj){

  if(obj==null){

   return false;

}

  if(this==obj){

  return true;

}

if(obj instanceof Person){

Person person=(Person)obj;

return person.name==this.name&&person.age==this.age;

}else{

return false;

}

}

public static void main(String[] args) {

Person p = new Person("hong",21);

Person p2 = new Person("hong",21);

System.out .println(p.equals(p2));

}

}

输出值是:

true

4 equals和==

(1)对于字符串变量来说,使用“==”和“equals()”方法比较字符串时,其比较方法不同。

1)“==”比较两个变量本身的值,即两个对象在内存中的首地址。

2)“equals()”比较字符串中所包含的内容是否相同。

代码实例:

(2)对于非字符串对象来说,"=="和"equals"方法的作用是相同的都是用来比较其对象在堆内存的首地址,即用来比较两个引用变量是否指向同一个对象。

class A

{

A obj1 = new A();

A obj2 = new A();

}

那么:obj1==obj2是false

obj1.equals(obj2)也是false

(3)对于非字符串对象来说,如果重新定义了equals这个方法,而且比较的是值,而不是地址。"=="和"equals"方法的作用则不同了。见下边的例子:

package com.example.objects;

public class Animal {

private String name;

private int age;

public Animal(String name,int age){

this.name = name;

this.age = age;

}

public boolean equals(Object obj){

if(obj instanceof Animal){

Animal animal=(Animal)obj;

return animal.name==this.name&&animal.age==this.age;

}else{

return false;

}

}

public static void main(String[] args) {

Animal a = new Animal("xing",5);

Animal a2 = new Animal("xing",5);

System.out.println(a.equals(a2));//true,重写了equals方法

System.out .println(a==a2);//false,==比较的是地址值,而不是像equals方法,因此是false

}

}

(4)如果是基本类型比较,那么只能用==来比较,不能用equals ,见下边的例子

int a = 3;

int b = 4;

int c = 3;

System.out.println(a == b);//结果是false

System.out.println(a == c);//结果是true

System.out.println(a.equals(c));//错误,编译不能通过

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,654评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,678评论 18 139
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,057评论 0 4
  • 四季中,我爱春吐蕊,生命之芽悄悄地伸着懒腰,睡眼惺忪地,不期然,破土而出; 当然,我亦爱秋吐丝,美...
    依然朵儿阅读 133评论 0 2
  • 学生狗一枚 自然每天也会有很多小商小贩的小推车在学校门口 一般不是很喜欢那些,偶尔还是会买来解解馋。虽然脏,毕竟比...
    诺笙阅读 295评论 9 3