第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 ...
随机推荐
- Left Join B表,只取B表一条记录
--用OUTER APPLY select b.* FROM a表 a OUTER APPLY () * from b表 WHERE [Name] = a.[AName] ORDER BY BNo d ...
- Charles抓https请求详细步骤
1.电脑上安装好Charles 2.电脑上安装证书 (1)点击Help - SSL Proxying - Install Charlse Root Certificate (2)在电脑上找到证书.此时 ...
- Python脚本字符集问题
运行脚本的时候,总是报错: SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb9 in position 0: inval ...
- gitlab简介与配置
版本控制介绍 版本控制是指对软件开发过程中各种程序代码.配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一. 版本控制最主要的功能就是追踪文件的变更.它将什么时候.什么人更改了文件的什么 ...
- Chapter6_访问权限控制_类的访问权限
在Java中,访问权限修饰词也可以用于确定库中的哪些类对于该库的使用者是可用的,类既不可以是private也不可以是protected的,对于类的访问权限,只有两种选择:包访问权限或者public.下 ...
- java 基本原则
开闭原则:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求. 可以通过“抽象约束.封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一 ...
- Jenkins构建maven项目跳过测试用例的命令
在Jenkins构建项目的时候,有时候执行大量的单元测试用例需要浪费很多时间,又或者测试环境与其他dubbo,zookeeper服务器环境不通执行失败, 为了更快速的构建,可在build选项中使用如下 ...
- spring boot 注解
一级注解:(写在类名前面的)@RestController: 等价于在函数前面写@ResponseBody ,会直接返回要显示的内容 @ControllerString返回的是模板文件的名称. 二级注 ...
- vue公共
1 需求:在做项目的过程中发现,有一些功能是公共的,于是就想把这些公共的功能抽出来,做成独立的模块,别的项目需要用到,直接引用这个模块 2 问题: 前端:1 是用vue做的,vue的跳转是通过rout ...
- JAVA 8 主要新特性 ----------------(七)新时间日期 API -----LocalDateTime
一.LocalDateTime简介 二.实战讲解 LocalDateTime localDateMax = LocalDateTime.MAX; System.out.println("lo ...