第38节:hashCode()与toString()与equals()函数的作用,内部类和匿名内部类
hashCode()和toString()
Hash
算法是把任意长度的数据通过hash
算法成为散列值
hashCode()
public int hashCode(){
int result = 10;
result = 2*result + age;
result = 2*result + name.hashCode();
return result;
}
toString()
public String toString(){
String result = "age:"+age+","+"name:"+name;
return result;
}
equals()
"=="
操作符的作用
用来比较两个值是否相等
// 在堆内存中有两个对象u1,u2
User u1 = new User();
User u2 = new User();
User u3 = u1;
// u1和u3指向同一个对象
class Test{
public static void main(String[] args){
User u1=new User();
User u2=new User();
User u3 = u1;
boolean b1 = u1 == u2;
boolean b2 = u1 == u3;
System.out.println(b1);
System.out.println(b2);
}
}
// 结果
false
true
什么是对象的内容相等呢?要符合对象的内容相等需要,对象的类型相同,两个对象的成员变量的值完全相同,如何比较对象的类型相同,可以用instanceof
操作符进行比较哦~
User u1 = new User();
User u2 = new User();
boolean b1 = u1.equals(u2);
System.out.println(b1);
// false
源码
public boolean equals(Object obj){
return (this == obj);
}
// 创建类
class User{
String name;
int age;
public boolean equals(Object obj){
if(this == obj){
return true
}
boolean b = obj instanceof User;
if(b){
User u = (user)obj;
if(this.age == u.age && this.name.equals(u.name)){
return ture;
}else{
return false;
}
}else{
return false;
}
}
}
class Test{
public static void main(String[] args){
User u1 = new User();
User u2 = new User();
User u3 = new User();
...
System.out.println(u1.equals(u2));
System.out.println(u1.equals(u3));
}
}
// false
// true
内部类和匿名内部类
什么是内部类呢?内部类的使用方法是什么呢?如何使用匿名内部类呢?
class A{
class B{
...
}
}
// 文件
A.class
A$B.class
class Test{
public static void mian(String[] args){
// 创建外部类的对象
A a = new A();
// 内部类的表示 A.B new A().new B()
A.B b = new A().new B();
}
}
内部类可以直接访问外部类,但是外部类要访问内部类中的成员变量,就必须要创建内部类的对象。
// 外部类
class Demo{
private int num = 3;
// 定义内部类
class Int{
void show(){
System.out.println("num="+num);
}
}
void method(){
Int int = new Int();
int.show();
}
}
class Inner{
public static void main(Stirng[] args){
Demo demo = new Demo();
demo.method();
}
}
内部类的分类:
静态内部类;局部内部类;成员内部类;匿名内部类
class A{
// 外部类的变量
int i;
class B{
// 内部类的变量
int j;
// 内部类的方法
int funB(){
int result = i+j; // 编译没有问题
return result;
}
}
}
外部类如果不创建外部类对象,就不能直接创建内部了对象
A a = new A();
A.B = new A().new B();
// A.B = a.new B();
赋值:
a.i = 1;
b.j = 2;
int result = b.funB();
// 3
内部类可以随意使用外部类的成员变量
int funB(){
int result = A.this.i + j;
return result;
}
匿名内部类:
是一种特殊的局部内部类。
// 没有名字的类
interface A{
public void doSomething();
}
class B{
public void fun(A a){
System.out.println("B类的fun");
a.doSomething();
}
}
class Demo implements A{
public void doSomething(){
System.out.println("do");
}
}
匿名内部类
class Test{
public static void main(String args[]){
B b = new B();
// 匿名内部类
b.fun(new A(){
public void doSomething(){
System.out.println("匿名");
}
});
}
}
什么是匿名对象,匿名对象是对象的简化形式,没有对象名,只能使用一次。
class Student
{
// 创建属性
Stinrg name;
int tall;
// 定义方法
void study()
{
System.out.println("好好学习"+name);
}
}
class Demo
{
// 定义主函数
public static void main(String[] args)
{
// 创建类的对象
// 类类型的变量一定指向对象
Student stu = new Student();
// 调用对象的成员
stu.name = "dashu";
// 调用对象的方法
stu.study();
}
}
成员内部类:
在成员变量的位置上定义的类为成员内部类。如果要使用成员内部类就要使用外部类.内部类来访问。
使用外部类的名字来访问,是因为一个内部类可能有不同的外部类。要有一个内部类,必须要有外部类的对象,因为成员内部类要用外部类访问。
成员内部类可以访问外部类的所有属性,成员内部类不能定义有静态属性。
静态内部类:
在成员位置上用static
修饰的内部类为静态内部类。静态内部类只能访问外部类的静态成员和本内部类的成员;且不能访问外部类的非静态成员。
局部内部类:
局部,在一个方法中内的类,为局部内部类,局部内部类不能用访问修饰符,作用域在定义的它的区域内。
局部内部类可以访问外部类的成员属性和静态属性,也可以访问final
修饰的局部变量,但不能访问非final的局部变量。
往后余生,唯独有你
简书作者:达叔小生
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: https://www.jianshu.com/u/c785ece603d1
结语
- 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
- 小礼物走一走 or 点赞
第38节:hashCode()与toString()与equals()函数的作用,内部类和匿名内部类的更多相关文章
- equals函数的作用
1.equals函数在什么地方 在Object类中,写法与==一样,但是我们用的时候要重写这个equals方法 String类型中的equals是复写好的 2.equals函数的作用 ==号在比较两个 ...
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解(转载)
java中的hashcode.equals和toString方法都是基类Object的方法. 首先说说toString方法,简单的总结了下API说明就是:返回该对象的字符串表示,信息应该是简明但易于读 ...
- 复写equals、hashCode和toString方法
equals.hashCode和toString 这三个方法都是object类的方法,由于所有的类都是继承这个类,所以每一个类都有这三个方法. 1.复写equals方法 原则: 首先,两个实例是相同的 ...
- Java:验证在类继承过程中equals()、 hashcode()、toString()方法的使用
以下通过实际例子对类创建过程汇中常用的equals().hashcode().toString()方法进行展示,三个方法的创建过程具有通用性,在项目中可直接改写. //通过超类Employee和其子类 ...
- hashCode()和toString()
hashCode函数和toString函数也在Object类中,同样,所有的类都继承了这2个函数. hashCode函数用于生成哈希码,没有参数,返回值为整型 把u的值作为键存入map中,使用get方 ...
- hashcode()和equals()
一.equal()方法 Object类中equals()方法实现如下: public boolean equals(Object obj) { return (this == obj); } 通过该实 ...
- hashCode() 和equals() 区别和作用(转)
出处:https://www.jianshu.com/p/5a7f5f786b75 本章的内容主要解决下面几个问题: 1 equals() 的作用是什么? 2 equals() 与 == 的区别是什么 ...
- hashcode()和equals()的作用、区别、联系
介绍一. hashCode()方法和equal()方法的作用其实一样,在Java里都是用来对比两个对象是否相等一致,那么equal()既然已经能实现对比的功能了,为什么还要hashCode() ...
- 1.9(java学习笔记)object类及toString()与equals()方法
object类 java中objec是所有类公共的父类,一个类只要没有明显的继承某一类,那么它就是继承object类. 例如 class Person {......};和class Person e ...
随机推荐
- selenium启动谷歌浏览器
谷歌浏览器可以是任意版本. 根据谷歌浏览器的版本,下载响应的浏览器驱动(百度:谷歌驱动与谷歌浏览器版本映射表). 我用的是win7 ,下载win32就行了.下载解压之后可以放在python的安装目录下 ...
- docker run命令运行以及参数详解
命令格式: -a, --attach=[] 登录容器(必须是以docker run -d启动的容器) -w, --workdir="" 指定容器的工作目录 -c, --cpu-sh ...
- [精华][推荐] CAS SSO单点登录环境搭建及实例
1.因为是本地模拟sso环境,而sso的环境测试需要域名,所以需要虚拟几个域名出来,步骤如下: 2.进入目录C:\Windows\System32\drivers\etc 3.修改hosts文件 12 ...
- C++重载Level蓝图
一.从ALevelScriptActor派生自己的类,添加功能并编译. 二.在编辑器中打开level blueprint,然后class default选项卡中,在细节面板中Parent class选 ...
- Python 验证码识别-- tesserocr
Python 验证码识别-- tesserocr tesserocr 是 Python 的一个 OCR 识别库 ,但其实是对 tesseract 做的一 层 Python API 封装,所以它的核心是 ...
- 微信浏览器里在底部的输入框,ios11的不会被遮盖、10.1会被盖住
/** * 由于ios10 和 ios11 版本之间的差异,所以先判断ios系统版本之后再做处理 */ let str = navigator.userAgent.toLowerCase(); let ...
- Mysql 主从数据库
MYSQL主从数据库同步备份配置 一.准备 用两台服务器做测试: Master Server: 172.16.0.180/Linux/MYSQL 5.1.41 Slave Server: 172.16 ...
- 学习Acegi应用到实际项目中(11)- 切换用户
在某些应用场合中,可能需要用到切换用户的功能,从而以另一用户的身份进行相关操作.这一点类似于在Linux系统中,用su命令切换到另一用户进行相关操作. 既然实际应用中有这种场合,那么我们就有必要对其进 ...
- vue路由复用
使用多个<router-view>可以复用路由,但是每个<router-view>要带一个name属性 更改路由,配置默项和复用项,定义复用项的name 例子: App.vue ...
- 前台js接收后台的json数据
后台返回的json数据,如php的: return json_encode($data); 在前台 js接收如下: function json2object(str){ var jsstr = str ...