语法特性篇
Java对象的比较
1. 对象比较的问题
- Java中引用类型的变量不能直接按照 > 或者 < 方式进行比较。
- 那为什么==可以比较?
- 因为:对于用户实现自定义类型,都默认继承自Object类,而Object类中提供了equal方法,而==默认情况下调 用的就是equal方法,
- 但是该方法的比较规则是:没有比较引用变量引用对象的内容,而是直接比较引用变量的地 址,但有些情况下该种比较就不符合题意。
2. 对象比较的方法
-
覆写基类的 equals
-
基于 Comparble 接口类的比较
- 基于比较器比较
覆写基类的equals
说明:
- equals 是子类重写父类 Object中的方法;
- 只能比较是否相等的;
- 返回值是boolean类型,即true or false
基于Comparble接口类的比较
说明:
- 本身类需要使用implements 实现 Comparable<E> 接口;
- 重新接口中compareTo方法;
- 返回值是 int 类型;
- 在类的内部实现,侵入性强,耦合度高;
基于比较器比较
说明:
- 需要重新定义一个比较类,该比较类需要使用implements 实现Comparator接口;
- 重新方法中compare方法;
- 返回值是int类型
- 在类的外部实现,侵入性小,耦合度低;
Java中的字符串常量池
intern 方法
intern
是一个
native
方法
(Native
方法指:底层使用
C++
实现的,看不到其实现的源代码
)
,
该方法的作用是手
动将创建的
String对象添加到常量池中。
Java 反射
1. 反射的理解
Java的反射机制是在运行状态的时候,对于任意一个类,获取其中的所有属性和方法,并且任意使用与调用,还可以修改部分类型信息。
2. 用途
- 1. 获取只对系统开放的方法;
- 2. 开发各种通用框架;
-
3. 反射程序就能判断出该对象和类属于哪些类。
3. 反射相关的类
Java的枚举
枚举不能被反射
Java的lambda表达式
- lambda方法体中,不能修改外部变量的值,但是可以修改引用指向中的值,也就是说,不能修改"栈上的值,可以修改堆上的值";
- Java 的 lambda要搭配函数式接口使用;
- lambda 可以使用集合遍历forEach中,比较接口等等