0%

lang

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

Google Guava

Optional、Objects、Joiner、Spilter、CharMatcher、CaseFormat、Preconditions

只想买包辣条