第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 ...
随机推荐
- VSCode 常用快捷键
快捷键 基础编辑 快捷键 作用 Ctrl+X 剪切 Ctrl+C 复制 Ctrl+Shift+K 删除当前行 Ctrl+Enter 在当前行之后插入一行 Ctrl+Shift+Enter 在当前行之前 ...
- MUI 添加自定义图标(注意点)
参考: https://blog.csdn.net/qq_39759115/article/details/79436606 注意: 1. 将这个原来的逗号改成分号 2. 这些图标的名字都可以改名字
- Servlet中的转发与重定向
Sevlet 的转发与重定向都可以使得浏览器指向另一个资源文件,但它们的运行机制不相同. 一.Servlet的转发 有两种方式获得转发对象(RequestDispathcer): HttpServle ...
- MySQL函数转储存(当前月数据同步)
BEGIN declare a1 int default 0;#第一次循环的循环变量 declare a2 int default 0; declare b1 int default 0; decla ...
- MySQL开发设计规范
1.库命名规则:dbname_suffix,分为_dev/_test/_pre/_mertest/_perf/_prod六个环境 2.适度反范式设计,冗余表字段数据减少JOIN关联提高访问效率 3.普 ...
- jmeter手写脚本,使用正则获取cookie(禁用cookies管理器)
注:这里以bugfree为例 1.bugfree登录时会有重定向,这会导致每个URL都会有.因此要手动获取cookie的时候,需要去掉重定向勾选 正则获取动态PHPsession 获取到值后,放到信息 ...
- HTML5新规范和CSS3新特性
1.HTML5最新规范(HTML5是HTML.XHTML以及HTML.DOM的新标准) ①用于绘画canvas元素 ②用于媒介回放的video和audio元素 ③对本地离线存储的更好支持 ④新的特俗内 ...
- 在IDEA下导入Maven项目之后 Dependencies报红线
在IDEA中导入新的Maven项目之后,许多jar包出现波浪线的情况,在网上搜了很多办法都不管,什么直接删掉pom文件中的依赖,保存之后,刷新再ctrl+z 撤回 问题就消失了, 还有的说,你可以直接 ...
- Listener随笔
[1]监听器简介 > Listener是JavaWeb中三大组件之一.Servlet.Filter.Listener > 三大组件都有的共同特点,都需要实现一个接口,并在web.x ...
- mysql中的concat函数,concat_ws函数,concat_group函数之间的区别
一.CONCAT()函数CONCAT()函数用于将多个字符串连接成一个字符串.使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为+----+ ...