Java常用类|String类详解 + BigDecimal精准计算(含面试题)
2026/9/7 21:59:06 网站建设 项目流程

一、String 类

  • String 类位于java.lang包,被final修饰,不能被继承,没有子类

1. 字符串两种创建方式

方式 1:字面量直接赋值
String s1 = "hello";

原理:优先去字符串常量池(串池)查找该字符串。

  • 存在:直接复用池中的对象
  • 不存在:在常量池创建对象
  • 对象产生数量:0‑1
方式 2:new String 创建对象
String s2 = new String("world");

原理:

  1. 一定会在堆内存创建字符串对象
  2. 再去常量池查找字面量,没有则在常量池新建对象,有则直接复用
  • 对象产生数量: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.length
boolean contains(String str)判断是否包含子串,返回 true/false
char[] toCharArray()字符串转为 char 字符数组
boolean equals(String str)比较字符串内容是否相等,重写 Object 的 equals
boolean equalsIgnoreCase(String str)忽略大小写比较字符串内容
String toUpperCase()全部转为大写
String toLowerCase()全部转为小写
int indexOf(String str)查找子串第一次出现的下标,找不到返回‑1
int indexOf(String str,int fromIndex)从指定下标位置向后查找
int lastIndexOf(String str)查找子串最后一次出现的下标,找不到返回‑1
boolean 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 的不变性

  1. 字符串字面量属于常量,一旦创建不可修改。字符串拼接等操作不会修改原字符串,会拷贝生成新字符串。
  2. 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 区别

  1. String:不可变字符串;拼接会产生大量新对象,效率低;线程安全。
  2. StringBuffer:可变字符串;线程安全;拼接效率较高。
  3. 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);

参数说明:

  1. 第一个参数:除数
  2. 第二个参数:保留小数位数
  3. 第三个参数:舍入模式,BigDecimal.ROUND_HALF_UP代表四舍五入。

注意:除法如果除不尽,不指定保留位数会直接抛出算术异常。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询