字符串String
String类 引用类型 默认值null
声明字符串
字符串的拼接用+
字符串和所有类型相加(+)后得到的都是字符串
加号(+)在拼接字符串和数字运算时,优先级是一样的
String对象定义后就不可改变
因为String类内部用private final修饰value数组,是常量
String类拥有字符串常量池,池即为容器,可以实现数据的重用,优化常量
使用量的方式声明的字符串就会加入常量池中
当程序中第一次使用量的形式定义"123"字符串,会将这个字符串对象存入<字符串常量池>中
之后再使用量的形式使用该对象,就执行使用常量池中的对象
其中strC、strD、bb是实例化出来的新对象
item是变量,只有代码执行到该语句才能确定。
str.intern();方法
返回值:为str对象在字符串常量池中的副本对象
方法执行过程:检查str是否在字符串常量池中存在副本
如果不存在就复制一份,存入到常量池中,然后返回常量池中的副本对象
如果已经存在副本对象,直接返回副本对象
所以若两个字符串 equals为true
那么两个字符串的intern方法的==也为true
因此new String("abc") 创建了几个对象:在常量值有副本就创建一个
没有副本就创建两个
String类的常用方法
方法名 | 说明 | 输出 |
equals | a.equals(b); 字符串比较,比较字符串a和b,内容相同返回true,不同返回false | |
valueOf | String.valueOf(); 将传入的参数转成字符串,返回String类型 | |
indexOf | a.indexOf(b); 查找子串b在a中出现时的位置,返回int类型(index),找不到返回-1 从前往后数 | |
lastIndexOf | a.lastIndexOf(b) 查找子串b在a中出现时的位置,返回int类型(index),找不到返回-1 从后往前数 | |
charAt | a.charAt(b) 获取a字符串中b位置的字符,返回char类型 | |
substring | a.substring(b,c); 截取字符串a,从开始下标b到结束下标c,返回String类型 包含开始下标,不包括结束下标 | |
replace | a.replace(b,c); 将字符串a中出现b的部分全部替换为c,返回String类型 | |
replaceAll | a.replace(b,c); b为正则表达式 将字符串a中符合正则表达式的部分全部替换为c . 表示全部 | |
split | a.split(b); b为正则表达式 在字符串a中以符合正则表达式b的内容为分割,将字符串分割成多个短字符串,返回类型是字符串数组类型 如果符合正则表达式的内容在开头,开头将分割出一个空串 | |
length | a.length(); 返回字符串的长度,返回int类型 | |
trim | a.trim(); 去除前后空白位 \n \r \t | |
toUpperCase | a.toUpperCase(); 将字符串a的字母全部换为大写,返回String类型 | |
toLowerCase | a.toLowerCase(); 将字符串a的字母全部换为小写,返回String类型 | |
isEmpty | a.isEmpty(); 判断字符串a是否是空串。是空串返回true,不是返回false。 | |
startsWith | a.startsWith(b); 判断字符串a是否是以b开头。是返回true,不是返回false。 | |
endsWith | a.endsWith(b); 判断字符串a是否是以b结尾。是返回true,不是返回false。 |
StringBuilder和StringBuffer
String字符串定义后就不可变 存在常量池里
因此在拼接字符串时会不断产生中间串
为了减少空间的占用
使用StringBuilder类或StringBuffer类
调用append方法往StringBuilder对象内的数组中追加字符,其中没有产生字符串对象
StringBuilder类中的数组默认容量是16
追加新的字符时,容量不够就需要扩容(value)
默认扩容 原来的容量*2+2;
若还不够就直接给新字符的长度
StringBuilder是线程不安全的
StringBuffer是线程安全的
数组拷贝方法
System.arraycopy(src,srcPos,dest,destPos,length);
src:源数组
srcPos:源数组开始复制的位置
dest:目标数组
destPos:目标数组开始粘贴的位置
length:拷贝的长度
Date
时间类型
获取当前执行时间
以毫秒的形式获取时间
使用SimpleDateFormat类设置希望的时间类型
将时间格式化
返回本地代表的时区
真假随机数
Math类
Math.random();
获取真正的随机数,范围[0,1)
返回double类型
Random类
根据seed获取随机数
nextInt()获取下一个随机数
nextInt(bound)bound限制范围
Math.round();
四舍五入
传入double类型返回long类型
传入float类型返回int类型
Math.ceil();
向上取整
Math.floor();
向下取整