Lang
基础类型详解
基本数据类型
基本数据类型(Basic Type)
- 原始数据类型(Primitive Type):byte、short、int、long、float、double、boolean、char
- 包装数据类型(Wrapper Type):Byte、Short、Integer、Long、Float、Double、Boolean、Character
- 复杂数据类型(Complex Type):String、Date
8种原始数据类型(Primitive)
byte、short、int、long、float、double、boolean、char
8种包装数据类型(Wrapper)
Byte、Short、Integer、Long、Float、Double、Boolean、Character
包装类缓存详解
包装类等值比较时的缓存问题
装箱和拆箱详解
拆箱时的NullPointerException问题
String
Basic
字符串常见操作
- 比较:equals、equalsIgnoreCase、compareTo
- 查询:contains、startsWith、endsWith
- 查找:indexOf、lastlndexOf
- 替换:replace、replaceFirst
- 拼接:concat
- 截取:substring
- 拆分:split
- 连接:join
ps:substitute = find + replace
Character
Usage
Concat
StringBuilder
Format
Question
String.valueOf和String.toString的区别
String.valueOf和Object.toString的区别
String之null(空值)和空串的区别
String之isBlank与isEmpty的区别
String之拼接是线程安全的吗
String拼接是线程安全的,因为是返回的是新对象,而不是原地修改
String的加号拼接编译后是通过StringBuilder实现的,不是操作符重载
虽然StringBuilder不是线程安全的,但是线程在使用String的加号拼接时每次都会创建新的StringBuilder局部变量
即每个线程用的StringBuilder都是独立的(不共享),所以使用String的加号拼接时不存在线程安全问题
String为什么是不可变的
- 字符数组私有且被final修饰,并且没有提供修改的方法,保证不会被外部修改
- 类被final修饰,使得不可被继承,保证不会被子类修改
String为什么要设计成不可变的
- String不可变时可以放到常量池里缓存并重复使用
- String不可变时容器可以缓存String的hashCode并重复使用
- String不可变时可以保证线程安全
String和StringBuilder、StringBuffer的区别
- String是不可变的,StringBuilder、StringBuffer是可变的
- String和StringBuffer是线程安全的,StringBuilder是线程不安全的
创建String对象时会创建几个对象
- 字符串字面量不存在时会创建2个对象(常量池中创建1个字面量匿名对象和堆中创建1个字符串对象)
- 字符串字面量存在时会创建1个对象(堆中创建1个字符串对象)
Number
Basic
Type
- 整数:byte、short、int、long、bigint
- 小数
- 浮点数:float、double
- 定点数:decimal
Integer
Float
Decimal
NaN
Infinity
Usage
Parse
Format
Question
Integer.valueOf和Integer.parseInt的区别
Integer.toString和String.valueOf的区别
Integer为什么不能使用==进行比较
- ==比较的是两个对象的地址是否相等,即是否是同一个对象
- 用数值字面量赋值给Integer对象时,会进行装箱操作
- 数值字面量小于等于127时会从缓存中取对象,这时候地址相等会返回true
- 数值字面量大于127时会新建对象,这时候地址不相等会返回false
- 所以Integer用==比较时会导致数值相等但结果为false的错误问题
- Integer对象的比较需要用equals方法
Boolean
Basic
DateTime
Basic
Type
DateTime(new)
Date(old)
Usage
Parse
Format
DateTimeFormatter(new)
SimpleDateFormat(old)
Timezone
Enum
Basic
Object
Basic
Question
Object的基本方法
getClass、hashCode、equals、toString、clone、wait、notify、notifyAll、finalize
equals和==的区别
- equals:逻辑相等,比较对象是否是相同的对象
- ==:引用相等,比较对象是否是同一个对象
注意:数值类对象比较使用 equals 可以避免以下问题
- 用==比较时,值相同但地址不同,带来的逻辑判断错误的问题
- 用==比较时,包装类缓存,带来的逻辑判断错误的问题
- 用==比较时,包装类拆箱,带来的空指针异常问题
toString方法的作用
finalize方法的作用
浅拷贝和深拷贝
Other
Optional
optional value(some or none)
either value(some or none) error
result some none error
java
scala
kotlin
Entry
entry key value
Pair
pair first second
triple first second third
tuple first … last
Math
Random
System
Runtime
Utils
Java
Objects
Apache Commons
ClassUtils、ObjectUtils、StringUtils、NumberUtils、BooleanUtils、DateUtils、EnumUtils、RandomUtils、RandomStringUtils、SystemUtils
- Apache Commons Lang详解
- Apache Commons ClassUtils详解
- Apache Commons ObjectUtils详解
- Apache Commons StringUtils详解
- Apache Commons StringEscapeUtils详解
- Apache Commons CaseUtils详解
- Apache Commons WordUtils详解
- Apache Commons NumberUtils详解
- Apache Commons BooleanUtils详解
- Apache Commons DateUtils详解
- Apache Commons DateFormatUtils详解
- Apache Commons EnumUtils详解
- Apache Commons RandomUtils详解
- Apache Commons RandomStringUtils详解
- Apache Commons SystemUtils详解
Google Guava
Optional、Objects、Joiner、Spilter、CharMatcher、CaseFormat、Preconditions