字符串

封装 char[] 数组
字符串常量池
第一次使用一个字面值,在常量池新建对象
再次使用相同字面值,直接访问常量池中存在的对象,
字符串不可变
s1 = “aaa”; s2 = “bbb” s3 = “ccc” s4 = s1 + s2 + s3;
s4 = “aaa” + “bbb” + “ccc”;
编译器编译时,优化为:
s5 = “aaabbbccc”;

字符串的方法
length() 字符串长度
charAt(i) 获取指定位置的字符
indexOf(子串) 查找子串,得到子串的起始位置下标 s = “abcabcabc”; i = s.indexOf(“bc”) 如果找不到,返回 -1
indexOf(子串, 起始位置)** 从起始位置向后找 i = s.indexOf(“bc”, 2)
lastIndexOf(子串) 从后向前找
substring(start) 截取子串,截取start到末尾
substring(start, end) 截取 [start, end)
trim() ** 去除两端的空白字符

StringBuilder / StringBuffer

可变的字符序列
封装 char[] 数组的对象
提供一组对内部字符修改的方法
常用来代替字符串,做高效率的字符串连接运算

append(**…)** 追加
内部数组的初始容量 16
放满后,创建翻倍容量的新数组

StringBuiler 和 StringBuffer
功能、作用完全相同
StringBuffer 是一个旧版本的类
StringBuilder 线程不安全,效率高,StringBuffer 线程安全
String,正则,StringBuilder,BigDecimal - 图1

负整数** ^-[0-9]_[1-9][0-9]_$
长度为8-10的用户密码(以字母开头、数字、下划线) ^[a-zA-Z]\w{7,9}$**

String 的正则表达式匹配运算方法

matches(正则) 判断字符串能否匹配指定的正则表达式

replaceAll(正则, 子串) 用新的子串,替换所有匹配的子串

split(正则) 用匹配的分隔字符,拆分字符串
“aaa,bbb,ccc”
[“aaa”, “bbb”, “ccc”]

Number 类—数字类型的抽象父类

子类:
Byte, Short, Integer, Long,Float, Double,BigDecimal, BigInteger
取值方法:
byteValue() shortValue() intValue() longValue() floatValue() doubleValue()

Integer

创建对象 new Integer(5) Integer.valueOf(5)
Integer类中,存在256个Integer的缓存对象,范围[-128,127]
如果指定范围内的值,访问缓存的对象,而不新建,如果指定范围外的值,直接新建对象

方法

字符串解析成 int
Integer.parseInt(“255”) 255 按照10进制解析
Integer.parseInt(“11111111”, 2) 255 2进制
Integer.parseInt(“377”, 8) 255 8进制
Integer.parseInt(“ff”, 16) 255 16进制

进制转换

Integer.toBinaryString(255) “11111111” 解析成2进制
Integer.toOctalString(255) “377” 8进制
Integer.toHexString(255) “ff” 16进制

Double

创建对象
new Double(3.14)
Double.valueOf(3.14) 与 new 相同,此方法只为保持队形
方法
字符串解析成 double Double.parseDouble(“3.14”)
Byte.parseByte()
Short.parseShort()
Integer.parseInt()
Long.parseLong()
Float.parseFloat()
Double.parseDouble()
Boolean.parseBoolean()
对浮点数特殊值进行判断
Infinity 3.14/0
Double.isInfinite(double)
NaN Math.sqrt(-2)
Double.isNaN(double)

自动装箱和自动拆箱

自动装箱
基本类型值,自动封装成对象
Integer a = 5; 编译器编译成: Integer a = Integer.valueOf(5);
自动拆箱
从对象中,自动取出封装的基本类型值
int i = a; 编译器编译成: int i = a.intValue();
a = a + 1; 编译器编译成: a = Integer.valueOf(a.intValue() + 1);
n 自动拆箱,要当心 null 值

BigDecimal/BigInteger

BigDecimal 精确地浮点数运算
BigInteger 超大的整数运算
创建对象
BigDecimal.valueOf(2)
方法
add(BigDecimal bd)
subtract(BigDecimal bd)
multiply(BigDecimal bd)
divide(BigDecimal bd)
divide(BigDecimal bd,保留位数,舍入方式)
setScale(保留位数,舍入方式) 舍入运算