JAVA_SE基础——60.初识Object
java是面向对象的语言,核心思想:找适合 的对象做适合 的事情:
方式一:自定义类,然后通过自定义的类创建对象。
方式二:sun提供了很多的类给我使用,我们只需要认识这些类,我们就可以通过这些类创建对象了。
Object类是所有类的终极父类。 任何一个类都继承了Object类。
Object:所有类的根类。
Object是不断抽取而来,具备着所有对象都具备的共性内容。
class Person{
private int age ;
Person(int age){
this.age = age;
}
}
class Demo{
}
class ObjectDemo{
public static void main(String[] args){
Person p1 = new Person(20);
Person p2 = new Person(20);
Person p3 = p1;
Demo d = new Demo();
System. out.println(p1 == p2);//false
System. out.println(p1.equals(p2));//false
System. out.println(p1.equals(p3));//true
System. out.println(p1.equals(d));//false
}
}
运行结果:
false
false
true
false
上面都是比较内存地址,而没有比较年龄,然而需要比较年龄则需要重写equals方法~
P.S.
==以及Object类的equals方法默认都是根据对象的哈希值判断两个对象是否相等。
可以通过覆盖Object的equals方法来重写比较规则。
class Person{
private int age ;
Person( int age){
this.age = age;
}
//比较Person的年龄,是否是同龄人
//一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否相同的依据。
public boolean equals(Object obj){
if(!(obj instanceof Person))
throw new ClassCastException("类型错误");
Person p = (Person)obj;
return this .age == p.age;
}
}
class ObjectDemo{
public static void main(String[] args){
Person p1 = new Person(20);
Person p2 = new Person(20);
System. out.println(p1.equals(p2));
}
}
运行结果:
ture
class Person{
private int age ;
Person(int age){
this.age = age;
}
public int hashCode(){
return age ;
}
}
class ObjectDemo{
public static void main(String[] args){
Person p1 = new Person(20);
System. out.println(p1);
System. out.println(p1.getClass().getName() + " $ " + Integer.toHexString(p1.hashCode()));
}
}
运行结果:
Person@21
Person $ 21
System. out.println(p1.getClass().getName() + " $ " + Integer.toHexString(p1.hashCode()));
为了方便初学者理解上面的代码,接下来分别对其中用到的方法进行解释,具体如下:
1.getClass().getName()代表返回对象所属类的类名,即是Person。
2.hashCode()代表返回该对象的哈希值。 (也可以把哈希码理解成是对象的内存地址)
3.Integer.toHexString(p1.hashCode())代表将对象哈希值用16进制表现。
其中,hashCode()是Object类中定义的一个方法,这个方法将对象的内存地址进行哈西运算,返回一个int型的哈希值
toString() : 返回该对象的字符串表示,返回一个字符串用于描述该对象的。 (返回的字符串表示: 完整类名+@+ 对象的哈希码)
交流企鹅:654249738,和自学者交流群:517284938
JAVA_SE基础——60.初识Object的更多相关文章
- JAVA_SE基础——6.标识符&关键字
学会写helloworld之后, 我们就开始来认识标识符&关键字 一.标识符 标识符是指可被用来为类.变量或方法等命名的字符序列,换言之,标识符就是用户自定义的名称来标识类.变量或方法等.更 ...
- JAVA_SE基础——26.[深入解析]局部变量与成员变量的区别
黑马程序员入学blog ... 如果这章节很难懂的话应该返回去先看 JAVA_SE基础--10.变量的作用域 定义的位置上区别: 1. 成员变量是定义在方法之外,类之内的. 2. 局部变量是定义在方 ...
- JAVA_SE基础——9.基本数据类型间的转换
前面我已经教会大家基本的数据类型进行了介绍, 然后这篇文章,我来介绍下,基本数据类型的转换. Java中有两种类型转换形式,分别是自动类型转换和强制类型转换. Step1.自动类型转换. 自动类型 ...
- JAVA_SE基础——8.基本数据类型
基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...
- JAVA_SE基础——7.常量&变量
上一篇,我讲了标识符&关键字 这篇我来解释下变量&常量~~~ 变量与常量这两个概念相信大家都不会感到陌生,在数学中就已经涉及了变量与常量.理解变量与常量,可以举这样一个例子: 例 ...
- JAVA_SE基础——5.第一个Java程序HelloWorld&注释的应用
配置完JDK&环境变量后,我们就可以开始写程序了,那么程序怎么写呢,用什么工具呢,我建议 为了方便学习,我们最好在一个磁盘下建立一个专门的文件来写java程序,比如就在D盘下建立一个名为&qu ...
- JAVA_SE基础——4.path的临时配置&Classpath的配置
这次,我来写下关于path的临时配置的心的 我来说个有可能的实例:如果你去到别人的电脑 又想写代码 又不想改乱别人的path配置的话 再说别人愿意你在别人的电脑上瞎配吗? 那该怎么办呢? 那没问题 ...
- JAVA_SE基础——2.环境变量的配置&测试JDK
哈喽,利用晚上的空余时间再写篇心的~~~ 谢谢大家 前一篇文章 JAVA_SE基础--JDK&JRE下载及安装http://blog.csdn.net/thescript_j/article ...
- JAVA_SE基础——1.JDK&JRE下载及安装
这是我学了JAVA来写的第一篇博客: 我首先是在传智播客领了张.毕向东老师的免费JAVA学习光盘来学习! 下面我来教大家安装使用JAVA时候必备的JDK 1.首先上甲骨文公司的官方网站下载JDK的安装 ...
随机推荐
- java输出日志
protected final Logger logger = Logger.getLogger(User.class); logger.info("在控制台中打印的内容");
- 推荐一款有趣的APP-种子习惯
在女朋友的影响下接触到了种子习惯的app,一开始不觉得它有多大魅力,只知道它有契约的功能,有很多人分享自己的习惯,记录生活中的点滴. 毕业回家的寒假,家里比较冷,每天起床都需要莫大的勇气,挣扎半天最终 ...
- 【noip模拟】局部最小值
TimeLimit: 1000ms MemoryLimit: 256MB Description 有一个n行m列的整数矩阵,其中1到n×m之间的每个整数恰好出现一次.如果一 ...
- centos6.5下 hdp-2.4.2安装
(1)准备工作 /usr/sbin/sestatus -v getenforce1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态SE ...
- react入门(一)
JSX语法: HTML 语言直接写在 JavaScript 语言之中,不加任何引号 , JSX语法中不能使用js中的关键字,例如:class 需要改为className JSX语法中要写表达式的话,需 ...
- c#开发wps插件(2)
上一篇,我们谈了插件开发原理,现在该是应用原理的时候了.工欲善其事必先利其器,首先安装wps 2016专业版,然后再开发. 第一步:打开vs2010,新建一个类库项目,项目结构如下: 说明:其中Res ...
- nginx学习之rewrite
rewrite 语法学习 什么是rewrite nginx的rewrite主要功是实现URL地址重写.nginx的rewrite规则需要PCRE的支持,既可以通过Perl兼容正则表达式进行规则匹配.n ...
- 审核Memcrashed Drdos攻击代码
0x00前言: 距离世界上最大的Drdos攻击已经过去了两个星期左右 昨天在交流的时候.群友在Github中找到了exploit. 0x01开始: #-- coding: utf8 -- #!/usr ...
- Qt 创建一个QtDesinger第三方控件
1.需要创建一个合适的.pro文件 2.创建一个继承QDesignerCustomWidgetInterface的类,描述控件的一些属性. 函数 描述和返回值 name() 指定控件的名称 group ...
- sudo用法
sudo的用法 xxx is not in the sudoers file.This incident will be reported.的解决方法 1.切换到root用户下,怎么切换就不 ...