跳至主要內容
Java 泛型深入解析:理解泛型原理与实际应用方法

6.13 Java泛型,深入解析

“二哥,为什么要设计泛型啊?”三妹开门见山地问。

“三妹啊,听哥慢慢给你讲啊。”我说。

Java 在 1.5 时增加了泛型机制,据说专家们为此花费了 5 年左右的时间(听起来是相当不容易)。有了泛型之后,尤其是对集合类的使用,就变得更规范了。

看下面这段简单的代码。

ArrayList<String> list = new ArrayList<String>();
list.add("沉默王二");
String str = list.get(0);

沉默王二大约 14 分钟Java核心Java重要知识点
掌握 Java instanceof关键字

5.17 Java instanceof关键字

“三妹,今天我们来过一个非常简单的知识点,instanceof关键字。”

“用不着哥你来讲了,今天就换个形式,我来讲给你听。”三妹雄赳赳气昂昂地说。

instanceof 关键字的用法其实很简单:

(object) instanceof (type)

沉默王二大约 4 分钟Java核心Java重要知识点
Java 中,先有Class还是先有Object?

Java 对象模型中:

  • 所有的类都是Class类的实例,Object是类,那么Object也是Class类的一个实例。
  • 所有的类都最终继承自Object类,Class是类,那么Class也继承自Object。

那到底是先有Class还是先有Object? JVM 是怎么处理这个“鸡·蛋”问题呢?


沉默王二大约 5 分钟Java核心Java重要知识点
Java中的instanceof关键字是如何实现的?

小二那天去面试,碰到了这个问题:“instanceof 关键字是如何实现的?”面试官希望他能从底层来分析一下,结果小二没答上来,就来问我。

我唯唯诺诺,强装镇定,只好把 R 大的一篇回答甩给了他,并且叮嘱他:“认认真真看,玩完后要是还不明白,再来问我。。。”

作者:RednaxelaFX,整理:沉默王二,链接:https://www.zhihu.com/question/21574535/answer/18998914


沉默王二大约 4 分钟Java核心Java重要知识点
Java 9为什么要将String的底层实现由char数组改成了byte数组?

4.11 String的底层实现为什么由char改成了byte?

“二哥,最近在我阅读 Java 11 的字符串源码,发现和 Java 8 的有很大不同。”三妹的脸上洋溢着青春的微笑😊,甜美地说道:“String 类的源码已经由 char[] 优化为了 byte[] 来存储字符串内容,为什么要这样做呢?”

“开门见山地说,从 char[]byte[],最主要的目的是节省字符串占用的内存空间。内存占用减少带来的另外一个好处,就是 GC 次数也会减少。”我用右手的大拇指凑了一下眼镜解释道。


沉默王二大约 7 分钟Java核心Java重要知识点
Java重写(Overriding)时应当遵守的11条规则

重写(Overriding)算是 Java 中一个非常重要的概念,理解重写到底是什么对每个 Java 程序员来说都至关重要,这篇文章就来给大家说说重写过程中应当遵守的 12 条规则。

01、什么是重写?

重写带来了一种非常重要的能力,可以让子类重新实现从超类那继承过来的方法。在下面这幅图中,Animal 是父类,Dog 是子类,Dog 重新实现了 move() 方法用来和父类进行区分,毕竟狗狗跑起来还是比较有特色的。


沉默王二大约 7 分钟Java核心Java重要知识点
Java hashCode方法解析:C++实现的高效本地方法

13.5 Java hashCode方法解析

今天我们来谈谈 Java 中的 hashCode() 方法。众所周知,Java 是一门面向对象的编程语言,所有的类都会默认继承自 Object 类,而 Object 的中文意思就是“对象”。

Object 类中就包含了 hashCode() 方法:

public native int hashCode();

沉默王二大约 10 分钟Java核心Java重要知识点
Java Comparable和Comparator的区别

6.14 Comparable和Comparator的区别

在前面学习优先级队列的时候,我们曾提到过 Comparable和Comparator,那这篇继续以面试官的角度去切入,一起来看。

那天,小二去马蜂窝面试,面试官老王一上来就甩给了他一道面试题:请问Comparable和Comparator有什么区别?小二差点笑出声,因为三年前,也就是 2021 年,他在《二哥的Java进阶之路》上看到过这题😆。


沉默王二大约 6 分钟Java核心Java重要知识点
聊聊Java中的不可变对象

5.18 Java不可变对象

“二哥,你能给我说说为什么 String 是 immutable 类(不可变对象)吗?我想研究它,想知道为什么它就不可变了,这种强烈的愿望就像想研究浩瀚的星空一样。但无奈自身功力有限,始终觉得雾里看花终隔一层。”三妹的这句话里满是彩虹屁的味道。

“既然三妹你说话这么好听,那我们就开始吧!”我愉快的心情就好像吃了两罐蜂蜜一样(😂)。

01、什么是不可变类

一个类的对象在通过构造方法创建后如果状态不会再被改变,那么它就是一个不可变(immutable)类。它的所有成员变量的赋值仅在构造方法中完成,不会提供任何 setter 方法供外部类去修改。


沉默王二大约 7 分钟Java核心Java重要知识点
2
3