当前位置: 首页 > news >正文

Java中的字符串及相关类的介绍

🔺jdk1.8 String底层是char[],字符数组。

1.String不是Java基本数据类型,不可以被继承,因为final关键字修饰.

2.String和StringBuilder、StringBuffer的区别
2.1 String的值创建后不能修改,修改String操作会创建新的String对象。
2.2 StringBuffer synchronized关键字保证线程安全
2.3 StringBuilder线程不安全,性能稍高。

3.String字符串拼接+操作
jdk1.8之前会创建新的String对象,1.8进行了优化,会在编译器处理变成基于StringBuilder的append方法处理。
大量字符串拼接推荐StringBuilder。
从JDK5开始,使用“+”拼接字符串,编译器编译后实际会自动优化为使用StringBuilder,所以如果是大量数据拼接推荐StringBuilder。
类似下面的拼接场景,“+”拼接方法每次循环都会new一个StringBuilder对象,内存和时间都会增加。
/**
* 循环使用+拼接字符串
*/
@Test
public void testLoopStringConcatenation03ByPlus() {
long startTime = System.currentTimeMillis();
int count = 10000;
String str = "testLoopStringConcatenation03ByPlus:";
for (int i = 0; i < count; i++) {
str = str + "-" + i;
}
System.out.println(str);
long endTime = System.currentTimeMillis();
System.out.println("testLoopStringConcatenation03ByPlus,拼接字符串" + count + "次,花费" + (endTime - startTime) + "秒");
}

 /*** 测试循环使用StringBuilder拼接字符串耗时*/
@Test
public void testLoopStringConcatenation04ByStringBuilder() {long startTime = System.currentTimeMillis();int count = 100000;StringBuilder stringBuilder = new StringBuilder("testLoopStringConcatenation04ByStringBuilder:");for (int i = 0; i < count; i++) {stringBuilder.append("-");stringBuilder.append(i);}String str = stringBuilder.toString();System.out.println(str);long endTime = System.currentTimeMillis();System.out.println("testLoopStringConcatenation04ByStringBuilder,拼接字符串" + count + "次,花费" + (endTime - startTime) + "秒");
}

输出:
testLoopStringConcatenation03ByPlus,拼接字符串10000次,花费463秒
testLoopStringConcatenation04ByStringBuilder,拼接字符串10000次,花费13秒

🔺如果循环处理+仍然会创建多个新的StringBuilder对象,所以推荐StringBuilder。

4.String str1 = new String("abc")和String str2 = "abc"的区别?
首先都是去字符串常量池检查是否存在“abc”,如果有则直接使用,没有则在常量池中创建“abc”对象。

String str1 = new String("abc")创建几个对象?
一个或2个,如果字符串常量池中存在“abc”,则1个,否则两个;
字符串常量池中不存在“abc”,创建下面两个对象:
b.堆上一个字符串对象“abc”
a.字符串常量池中字符串对象“abc”的引用

5.intern方法
将字符串对象的引用保存在字符串常量池中。
Returns:
a string that has the same contents as this string, but is guaranteed to be from a pool of unique strings.
如果字符串常量池中存在内容一样的字符串对象的引用,就返回该引用;如果不存在则创建一个指向该字符串对象的引用并返回。

🔺String.equals的方法被重写过,比较的是字符串的值是否相等;Integer包装类的equals方法也重写了,比较的是值。

http://www.hskmm.com/?act=detail&tid=38395

相关文章:

  • ABP - 工作单元(Unit of Work)[UnitOfWorkAttribute、IUnitOfWorkManager、UnitOfWorkOptions]
  • LeetCode刷题笔记
  • [NOIP2023] 双序列拓展 题解
  • 洛谷 P9530 Fish 2
  • 洛谷 P7011 Escape
  • 你可以把它喂给AI让AI猜猜我在干什么
  • 【深入浅出Nodejs】异步非阻塞IO
  • 135. 分发糖果
  • 【Java-JMM】Happens-before原则
  • P6072 『MdOI R1』Path
  • P1601题解
  • 10-23 好题选讲总结
  • 关于驻马店市 2025 中小学信息学竞赛的记录(入门级)(未完)
  • 关于Markdown的使用
  • 自定义Spring Cloud LoadBalancer实践
  • 游记——驻马店市2025中小学信息学竞赛(未完)
  • 线段树上二分
  • ABP - SqlSugar [SqlSugarModule、ISqlSugarClient、SqlSugarRepository]
  • Odoo18.0 对接 京东快递
  • SAP折旧模拟超过1000条资产dump问题及解决
  • [python] 代码性能分析工具line_profiler使用指北
  • react的diff算法
  • LLM学习记录DAY11
  • ABP - 当前用户 [ICurrentUser、CurrentUser]
  • 轮次检测模型 VoTurn-80M 开源,多模态融合架构;OpenAI 收购桌面助手 Sky:实时识别屏幕自然语言交互丨日报
  • 第4天(中等题 滑动窗口、哈希表)
  • 幂函数
  • ABP - 依赖注入和属性注入
  • SAP维护汇率的关键Tcode
  • ABP vNext 框架功能模块 - 动态API(Dynamic API)