{"id":21974140,"url":"https://github.com/javaobjects/demo516","last_synced_at":"2025-03-22T23:25:38.230Z","repository":{"id":105562324,"uuid":"196143506","full_name":"javaobjects/demo516","owner":"javaobjects","description":"Java高级应用编程","archived":false,"fork":false,"pushed_at":"2019-08-01T06:21:26.000Z","size":134,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-28T03:17:17.570Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/javaobjects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-10T06:17:56.000Z","updated_at":"2019-08-01T06:21:27.000Z","dependencies_parsed_at":"2024-03-25T09:15:12.613Z","dependency_job_id":null,"html_url":"https://github.com/javaobjects/demo516","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fdemo516","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fdemo516/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fdemo516/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/javaobjects%2Fdemo516/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/javaobjects","download_url":"https://codeload.github.com/javaobjects/demo516/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245033739,"owners_count":20550321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-29T15:38:52.275Z","updated_at":"2025-03-22T23:25:38.206Z","avatar_url":"https://github.com/javaobjects.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 114-Java-Object.md\n\n+ Object介绍及方法\n    + Object类是所有类的超类， Object是Java语言中唯一一个没有父类的类。\n    + 一个类可以不是Object类的直接子类，但一定是Object类的子类，Java中的每一个类都是从Object扩展来的。\n    + 在Object类中定义的方法，在所有类中都可以使用。\n    + public boolean equals(Object obj) \n        + 比较两个对象引用的值是否相等（比较哈希地址）\n    + public int hashCode()\n        + 返回十进制整数，唯一标识一个对象\n    + public String toString()\n        + 返回  类名@hashcode\n+ Object类常用方法        \n    + public boolean equals(Object obj)： 比较两个对象引用的值是否相等（比较地址）。指出调用该方法的对象是否与obj对象相等。即地址是否相等。\n    + public int hashCode()：该方法返回对象的哈希码，哈希码是一个代表对象的十六进制整数，比作对象的身份证号。在程序运行期间，每次调用同一个对象的hashCode()返回的哈希码必定相同，但是多次执行同一个程序，程序的一次执行和下一次执行期间同一个对象的哈希码不一定相同。实际上默认的哈希码是将对象的内存地址通过某种转换得到的，所以不同对象会有不同的哈希码。\n    + public String toString()：返回  类名@hashcode ；事实上返回这样的字符串没有什么实际的意义。一般子类都会覆盖该方法，让它返回有意义的文本。\n+ 通常，子类会覆盖equals( )，改变它的含义，所以有的类中equals( )是比较地址，有的类中该方法就不比较地址，具体的，就看子类新定义的该方法的规定。看看包装类中的equals()方法？\n+ 在java中有个规定：如果equals( )返回两个对象是相等的，那这两个对象上调用hashCode( )返回的整数必须相等。否则在使用Hash类型集合时就会产生错误。\n+ 所以在我们覆盖equals( )方法同时，还要记得覆盖hashCode( ）方法。需要说明，如果equals( )返回两个对象不等，它们的hashCode( )也可以返回相同的整数。但是最好让它们的hashCode( )返回不同的整数，这有利于提高Hash类型集合的性能。\n+ 重写equals方法时，一定要重写hashcode（）方法吗？\n    + 先说说hashcode的调用的条件。 如果你想往map里面放一个类作为map的键值，这个类又是你自己设计的，或者这个类不是你写的但是你修改了这个类的equals方法，这个时候，你就要注意重写hashcode方法。 这样 当你往map里放值得时候，系统会调用这个对象的.hashcode()方法来生成相应的hash值，来映射相应的对象。 如果同一个类的两个对象的属性值相等，那么他们的hashcode一定相等吗 这个要看你具体如何实现你的hashcode，如果你希望他们的值一样hashcode也一样，你就可以这样实现。 但是hashcode的实现，一般要满足几个特征，比如 自反性，传递性什么的。 \n\n**示例代码1**\n\n```\npackage Object类介绍;//包名都是小写，这里是特殊情况\n/**\n* Object类是所有类的超类， Object是Java语言中唯一一个没有父类的类。\n一个类可以不是Object类的直接子类，但一定是Object类的子类，Java中的每一个类都是从Object扩展来的。\n在Object类中定义的方法，在所有类中都可以使用。\npublic boolean equals(Object obj) \n比较两个对象引用的值是否相等（比较哈希地址）\npublic int hashCode()\n返回十进制整数，唯一标识一个对象\npublic String toString()\n返回  类名@hashcode\n\n* \u003cp\u003eTitle: TestObject\u003c/p\u003e  \n* \u003cp\u003eDescription: \u003c/p\u003e  \n* @author xianxian \n* @date 2019年7月10日\n */\npublic class TestObject {\n\n\t/**\n\t * 1.直接打印输出对象，默读调用toString()方法，\n\t * 输出地址，如果想改变，那么可以重写该方法\n\t * \u003cp\u003eTitle: main\u003c/p\u003e  \n\t * \u003cp\u003eDescription: \u003c/p\u003e  \n\t * @param args\n\t */\n\tpublic static void main(String[] args) {\n\t\tString s = new String(\"123\");\n\t\t//String类重写Object类的toString()方法，返回对象的字符序列值\n\t\t/**\n\t\t * 1.如果String对象实例化后没有正式的字符序列形式，\n\t\t * 那么调用toString(),输出空字符序列，就是空，什么都没有\n\t\t * 2.如果String对象为null，那么调用toString(),会抛出空指针异常\n\t\t */\n\t\tSystem.out.println(s.toString());//123\n\t\t\n\t\tObject o1 = new Object();\n\t\t/**\n\t\t * toString()：返回对象的字符串表示形式。\n\t\t * 格式：完整的类名+@+对象内存地址的十六进制表示形式\n\t\t */\n\t\tSystem.out.println(\"o1.toString():\" + o1.toString());//o1.toString():java.lang.Object@6d06d69c\n\t\t//Integer类重写Object类的toString（）方法，返回整数对象的值\n\t\tInteger i = new Integer(123);\n\t\tSystem.out.println(\"Integer 对象的toString():\" + i.toString());//Integer 对象的toString():123\n//\t\tSystem.out.println(new Integer(\"\").toString());//不要这样试探，无法把空串变成整数，会抛出异常\n\t\t\n\t\tStudent stu = new Student();\n\t\tstu.setId(1234);\n\t\t/**\n\t\t * 1.我们自已定义的对象，打印输出该对象，\n\t\t * 那么默认会调用Object类的toString()方法,\n\t\t * 输出:stu:Object类介绍.Student@7852e922\n\t\t * \n\t\t * 2.如果希望打印对象显示其属性信息，\n\t\t * 那么可以让该对象重写toString(),\n\t\t * 返回对象属性和值的字符串表示形式\n\t\t */\n\t\tSystem.out.println(\"stu:\" + stu);\n\t\t\n\t\t\n\t\tSystem.out.println(\"o1.hashcode():\" + o1.hashCode());//o1.hashcode():1829164700\n\t\t\n\t\tSystem.out.println();\n\t\t\n\t}\n\n}\n```\n```\npackage Object类介绍;\n\npublic class Student {\n\n\tprivate int id;\n\n\tpublic int getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(int id) {\n\t\tthis.id = id;\n\t}\n\n\t@Override\n\tpublic String toString() {\n\t\treturn \"Student [id=\" + id + \"]\";\n\t}\n}\n```\n**示例代码2**\n\n```\npackage Object类介绍;\n\npublic class Student {\n\n\tprivate int id;\n\n\tpublic int getId() {\n\t\treturn id;\n\t}\n\n\tpublic void setId(int id) {\n\t\tthis.id = id;\n\t}\n\n\t@Override\n\tpublic String toString() {\n\t\treturn \"Student [id=\" + id + \"]\";\n\t}\n\t//source -----\u003e Override/Implement Methods\n\t@Override\n\tpublic int hashCode() {\n//\t\treturn super.hashCode();\n\t\treturn 123;\n\t}\n}\n```\n```\npackage Object类介绍;\n\nimport java.util.Date;\n\npublic class TestHashCode {\n\n\tpublic static void main(String[] args) {\n\n\t\tObject o1 = new Object();\n\t\t\n\t\t//1.结论：Object类的hasCode方法：返回对象内存地址的十进制表示形式\n\t\tSystem.out.println(\"o1.hashCode():\" + o1.hashCode());//o1.hashCode():1829164700\n\t\t/**\n\t\t * toString()：返回对象的字符串表示形式。\n\t\t * 格式：完整的类名+@+对象内存地址的十六进制表示形式\n\t\t */\n\t\tSystem.out.println(\"o1.toString():\" + o1.toString());//o1.toString():java.lang.Object@6d06d69c\n\t\t\n\t\t\n\t\t//2.String类重写咯hashCode方法，对哈希值做了加工处理\n\t\tString s1 = new String(\"123\");\n\t\tSystem.out.println(s1.hashCode());//48690\n\t\t\n\t\tString s2 = new String(\"321\");\n\t\tSystem.out.println(s2.hashCode());//50610\n\t\t\n\t\t//3.Integer类重写咯hashCode方法，返回对象的值\n\t\tInteger i = new Integer(123678);\n\t\tSystem.out.println(i.hashCode());//hashCode(123678) -----\u003e 123678\n\t\t\n\t\t//4.自己定义的类可以重写hashCode方法，但是这样做没有任何意义\n\t\tStudent stu = new Student();\n\t\tSystem.out.println(stu.hashCode());\n\t\t//5.Date类为什么重写hashCode方法\n\t\t//比较好的博客地址https://www.cnblogs.com/Model-frog/p/5638014.html\n\t\tDate d = new Date();\n\t\tSystem.out.println(\"d.hashCode():\" + d.hashCode());//d.hashCode():-604836364\n\t}\n\n}\n```\n\n#### 拓展知识\n\n[Date类为什么重写hashCode方法](https://www.cnblogs.com/Model-frog/p/5638014.html)\n\n\n**以就就是我关于 *Java-Java API*  知识点的整理与总结的全部内容，[另附源码](https://github.com/javaobjects/demo515)**\n\n==================================================================\n#### 分割线\n==================================================================\n\n**博主为咯学编程：父母不同意学编程，现已断绝关系;恋人不同意学编程，现已分手;亲戚不同意学编程，现已断绝来往;老板不同意学编程,现已失业三十年。。。。。。如果此博文有帮到你欢迎打赏，金额不限。。。**\n\n![](images/pay.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavaobjects%2Fdemo516","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjavaobjects%2Fdemo516","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjavaobjects%2Fdemo516/lists"}