)
一、String 类String 类位于java.lang包被final修饰不能被继承没有子类。1. 字符串两种创建方式方式 1字面量直接赋值String s1 hello;原理优先去字符串常量池串池查找该字符串。存在直接复用池中的对象不存在在常量池创建对象对象产生数量0‑1个方式 2new String 创建对象String s2 new String(world);原理一定会在堆内存创建字符串对象再去常量池查找字面量没有则在常量池新建对象有则直接复用对象产生数量1‑2个intern () 方法String s2 new String(world); s2 s2.intern();调用intern()让引用指向字符串常量池中的对象。2. String 常用 API 方法String 底层本质是char[] value字符数组下标范围0 ~ 字符串长度‑1下标越界抛出StringIndexOutOfBoundsException表格方法说明char charAt(int index)根据下标获取对应字符int length()获取字符串长度是方法str.length ()数组是属性arr.lengthboolean contains(String str)判断是否包含子串返回 true/falsechar[] toCharArray()字符串转为 char 字符数组boolean equals(String str)比较字符串内容是否相等重写 Object 的 equalsboolean equalsIgnoreCase(String str)忽略大小写比较字符串内容String toUpperCase()全部转为大写String toLowerCase()全部转为小写int indexOf(String str)查找子串第一次出现的下标找不到返回‑1int indexOf(String str,int fromIndex)从指定下标位置向后查找int lastIndexOf(String str)查找子串最后一次出现的下标找不到返回‑1boolean endsWith(String str)判断字符串是否以指定后缀结尾String substring(int fromIndex,int toIndex)截取字符串左包含右不包含[fromIndex , toIndex‑1]String trim()去除字符串前后两端空格String[] split(String str)按照分隔符拆分字符串返回字符串数组String replaceAll(旧内容,新内容)字符串替换示例字符串遍历String str hello; for(int i 0 ; i str.length() ; i){ char c str.charAt(i); //操作字符c }trim 实际开发场景去除前后空格避免数字转换异常String str 38 ; int age Integer.parseInt(str.trim());3. String 的不变性字符串字面量属于常量一旦创建不可修改。字符串拼接等操作不会修改原字符串会拷贝生成新字符串。String 不可变长大量字符串拼接时效率低会产生很多中间垃圾对象。4. 可变字符串StringBuffer StringBuilder都位于java.lang包可变字符序列。表格类版本线程安全执行效率StringBufferJDK1.0线程安全效率较慢StringBuilderJDK5.0线程不安全效率高构造方法//无参构造 StringBuilder sb1 new StringBuilder(); //根据字符串创建可变字符串 StringBuilder sb2 new StringBuilder(java);核心方法sb2.append( 学习); //字符串拼接 String res sb2.toString(); //转为String类型✨面试题String、StringBuffer、StringBuilder 区别String不可变字符串拼接会产生大量新对象效率低线程安全。StringBuffer可变字符串线程安全拼接效率较高。StringBuilder可变字符串线程不安全拼接效率最高。二、BigDecimal 高精度运算包路径java.math作用解决浮点型float/double计算精度丢失问题用于金融、金额等对精度要求高的场景。1. 构造方法优先使用字符串构造保证精度BigDecimal bd new BigDecimal(10.25);2. 常用运算方法BigDecimal bd1 new BigDecimal(10.0); BigDecimal bd2 new BigDecimal(3.0); BigDecimal r1 bd1.add(bd2); //加法 bd1 bd2 BigDecimal r2 bd1.subtract(bd2); //减法 bd1 - bd2 BigDecimal r3 bd1.multiply(bd2); //乘法 bd1 * bd2 //除法参数(除数,保留小数位数,舍入模式) BigDecimal r4 bd1.divide(bd2,2,BigDecimal.ROUND_HALF_UP);参数说明第一个参数除数第二个参数保留小数位数第三个参数舍入模式BigDecimal.ROUND_HALF_UP代表四舍五入。注意除法如果除不尽不指定保留位数会直接抛出算术异常。