1,21条MySQL性能调优经验

    if (this == anObject) {

        return true;//如果是同一个对象

        //返回true

    }

    if (anObject instanceof String) {//判断类型anObject是否为String类型/String类的子类

        String anotherString = (String)anObject;//向下转型

        int n = value.length;

        if (n == anotherString.value.length) {

            char v1[] = value;

            char v2[] = anotherString.value;

            int i = 0;

            while (n-- != 0) {

                if (v1[i] != v2[i])

                    return false;

                i++;

            }

            return true;//两个字符串的所有字符都相等 返回true

        }

    }

    return false;//如果比较的不是字符串 返回false

} 



### [](https://gitee.com/vip204888/java-p7)3.举例说明两个子类中equals方法的用法



![请添加图片描述](https://img-blog.csdnimg.cn/2c2de9245b9c41adbc20a0768df538a8.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)  

可见str1 str2并不是同一个对象 所以第一个判断输出false



而第二个equals方法在子类中重写之后就不判断地址是否相等(是否为同一个对象)了 只去关注内容是否相等!



所以输出true



> 注意下面这一条注意事项哦!  

> ![请添加图片描述](https://img-blog.csdnimg.cn/f387b98048364df78b866d0aa9b7479b.png)



### [](https://gitee.com/vip204888/java-p7)4.equals方法课堂练习



#### [](https://gitee.com/vip204888/java-p7)练习重写equals方法



回头要记得来练习哦~一共有三道练习题



[【零基础 快速学Java】韩顺平 零基础30天学会Java\_哔哩哔哩](https://gitee.com/vip204888/java-p7)



#### [](https://gitee.com/vip204888/java-p7)小练



[【零基础 快速学Java】韩顺平 零基础30天学会Java\_哔哩哔哩\_](https://gitee.com/vip204888/java-p7)



[](https://gitee.com/vip204888/java-p7)【2】`hashCode`方法

------------------------------------------------------------------------------



之后在讲Hash表相关结构的时候要用到这个方法~



想学好`hashCode`的底层 需要用到**集合**的知识 所以我们先学习下`hashCode`表面的知识



### [](https://gitee.com/vip204888/java-p7)1.方法用途



> 返回该对象的哈希码值

> 

> 支持此方法是为了提高哈希表(eg:`java.util.Hashtable`提供的哈希表)的性能



老韩给出的几个小结——



【1】提高具有哈希结构的容器的效率



【2】两个引用如果指向的是同一个对象 那么哈希值肯定是一样的  

![请添加图片描述](https://img-blog.csdnimg.cn/4d26bffd265b4aeb8f15e646374056e5.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)  

【3】两个引用如果指向的不是同一个对象 那哈希值就不一样咯~



【4】哈希值是根据地址给分配的一个特殊的值 并不是等价于地址哦!(之前在数据结构中学过哈希表的同学有没有点儿印象~)



【5】案例演示 测试一下几个对象的地址值是否相同



public class hashCode {

public static void main(String[] args) {

    AA aa = new AA();

    AA2 aa2 = new AA2();//两个不同的引用

    AA aa3 = aa;

    AA aa4 = aa;

    System.out.println(aa.hashCode());

    System.out.println(aa2.hashCode());

    System.out.println(aa3.hashCode());

    System.out.println(aa4.hashCode());



}

}

class AA{}

class AA2{}




结果如下:



![请添加图片描述](https://img-blog.csdnimg.cn/440a99d678764c1a91627b1910f267d2.png)  

【6】后面在讲集合的时候 如果需要的话 也会重写 `hashCode` 到时候还会提到的哦~



[](https://gitee.com/vip204888/java-p7)【3】`toString`方法

------------------------------------------------------------------------------



> 默认(也就是Object中的`toString`方法)返回 “全类名(包名+类名) + @ + 哈希值的十六进制”

> 

> 而子类往往会重写`toString`方法 用于返回对象的属性信息

> 

> > 比如String类中 这个方法就会返回对象的字符串表示~  

> > ![请添加图片描述](https://img-blog.csdnimg.cn/152ae98a1e984977980709f3025a8d41.png)



### [](https://gitee.com/vip204888/java-p7)来举个例子



![请添加图片描述](https://img-blog.csdnimg.cn/29b67c3991d04499a0a02c9de736768e.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)  

然后来测试下Object类的`toString`方法——  

![请添加图片描述](https://img-blog.csdnimg.cn/452c44cd818f4f91945713f0c08f8a67.png)  

重写下`toString`方法试试——  

![请添加图片描述](https://img-blog.csdnimg.cn/659f88d5b58e4e46b49029267f15d7aa.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)  

![请添加图片描述](https://img-blog.csdnimg.cn/96e833606e9946ecb12a7315a6793885.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)  

这时候调用`toString`方法就可以输出对象的属性了  

![请添加图片描述](https://img-blog.csdnimg.cn/47a7272b9cff49da84a7a948ce5b8bac.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)



### [](https://gitee.com/vip204888/java-p7)直接输出一个对象的时候 `toString`方法会被直接调用



嗯是的



就是这么个神奇的规则!![请添加图片描述](https://img-blog.csdnimg.cn/8a07bfeadc4a4fef95e012e6d67ec62a.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)



[](https://gitee.com/vip204888/java-p7)【4】finalize方法

----------------------------------------------------------------------------



> ![请添加图片描述](https://img-blog.csdnimg.cn/022dfaa84bf7409cabb3ae3d8aee8803.png)  

> 对象被回收时 系统自动调用该对象的finalize方法

> 

> 子类可以重写该方法 做一些释放资源的操作



### [](https://gitee.com/vip204888/java-p7)对象什么时候被回收?



正如上面所说



对象没有任何引用时 `jvm`就认为这个对象是一个垃圾对象 就会使用垃圾回收机制来销毁该对象 比如:  

![请添加图片描述](https://img-blog.csdnimg.cn/2068a0aa097746b7b6f4bb03a08a57ee.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)  

销毁该对象前 会先调用finalize方法



我们可以重写这个方法哦~  

![请添加图片描述](https://img-blog.csdnimg.cn/0c3bb46329624805ac1eea8759e1e277.png)  

举个例子——![请添加图片描述](https://img-blog.csdnimg.cn/257b4a96311c4bd194eed303bbe8754b.png)  

但是我们在运行方法之后会发现并没有输出以上的语句



【???】



这是因为垃圾回收器并不是时时刻刻在监控 一有一个垃圾就去回收!这样效率很低啦~



而这个垃圾回收机制是很复杂的 我们后面再去讲  

![请添加图片描述](https://img-blog.csdnimg.cn/803cdb941f83407dbaad4a1c487086c0.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)  

我们可以通过 `System.gc()` 主动触发垃圾回收机制



> 像是呼叫保洁阿姨的操作

> 

> 一般来说阿姨会过来帮你打扫垃圾

> 

> 但是也有一定几率阿姨不过来~



主动触发之后 可以看到重写的finalize方法被调用了  

![请添加图片描述](https://img-blog.csdnimg.cn/65b99144fa6842c2bc4d57682b8f5d45.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)



### [](https://gitee.com/vip204888/java-p7)小结



实际开发中 我们**几乎不会运用finalize方法**



所以——



学这个更多就是为了应付面试QAQ



当然了 还是要学的哈!



[](https://gitee.com/vip204888/java-p7)9.断点调试(Debug)

============================================================================



[](https://gitee.com/vip204888/java-p7)【1】断点调试的用途

-------------------------------------------------------------------------



*   开发中 查找错误的时候 用断点调试一步步地看源码执行的过程 从而发现错误所在!

*   重要提示 断点调试的过程中 是运行状态 所以方法是根据对象的**运行类型**来执行的



[](https://gitee.com/vip204888/java-p7)【2】断点调试介绍

------------------------------------------------------------------------



### [](https://gitee.com/vip204888/java-p7)断点调试的步骤



在程序的某一行设置一个断电 调试时 程序运行到这一行就会停住  

![请添加图片描述](https://img-blog.csdnimg.cn/fecdf2d223d340fe82da5afa0029a7ab.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzA0OTQy,size_16,color_FFFFFF,t_70)  

然后我们可以一步步地往下调试 调试过程中可以看到各个变量**当前的值**




# 最后总结

## ActiveMQ+Kafka+RabbitMQ学习笔记PDF

![image.png](https://img-blog.csdnimg.cn/img_convert/a571de6e16a673744c81f4d5a9ff13d2.png)


* ### RabbitMQ实战指南

![image.png](https://img-blog.csdnimg.cn/img_convert/7c25c504f090c3248a54e76e3c87081f.png)


* ### 手写RocketMQ笔记

![image.png](https://img-blog.csdnimg.cn/img_convert/f1c25f3af6b2e3e4ccbe7acb34d65a58.png)


* ### 手写“Kafka笔记”

![image](https://img-blog.csdnimg.cn/img_convert/0bdb34f66f242377af352f1789bba63e.png)

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

WwNGovG-1628562076413)]


* ### RabbitMQ实战指南

[外链图片转存中...(img-19z8yN1t-1628562076415)]


* ### 手写RocketMQ笔记

[外链图片转存中...(img-UD1sBv0V-1628562076417)]


* ### 手写“Kafka笔记”

[外链图片转存中...(img-uQo44mlq-1628562076419)]

关于分布式,限流+缓存+缓存,这三大技术(包含:ZooKeeper+Nginx+MongoDB+memcached+Redis+ActiveMQ+Kafka+RabbitMQ)等等。这些相关的面试也好,还有手写以及学习的笔记PDF,都是啃透分布式技术必不可少的宝藏。以上的每一个专题每一个小分类都有相关的介绍,并且小编也已经将其整理成PDF啦

**[资料领取方式:戳这里免费领取](https://gitee.com/vip204888/java-p7)**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值