当前位置: 首页 > 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.zskr.cn/news/29713.html

相关文章:

  • nginx反向代理和负载均衡 - 实践
  • 【深入浅出Nodejs】异步非阻塞IO
  • 10-23 好题选讲总结
  • [python] 代码性能分析工具line_profiler使用指北
  • react的diff算法
  • LLM学习记录DAY11
  • ABP - 依赖注入和属性注入
  • ABP vNext 框架功能模块 - 依赖注入和属性注入
  • 幂函数
  • ABP vNext 框架功能模块 - 动态API(Dynamic API)[RemoteServiceAttribute | DynamicApiControllerBuilder]
  • AI股票预测分析报告 - 2025年10月24日 - 20:08:50
  • str.endswith() 类似的方法
  • cgroup
  • 数字人:数字人公司排行榜及技术深度剖析
  • 【同余最短路】学习笔记
  • 数字人:数字人公司深度解析与未来展望
  • CSP/NOIP 复习:单调栈
  • 数字人企业:数字人公司排行榜深度解析
  • 数字人公司:数字人新趋势技术驱动与市场前景解析
  • WPF 深入系列.2.布局环境.布局控件.Grid
  • 冬日绘板 2026 珂朵莉计划 如何获取 Token
  • 数字人:怎么选择数字人实力公司
  • Asterix cat-062 ,航班号字段的编码解码
  • AI优化企业:GEO公司技术先驱
  • 题3
  • 吴恩达深度学习课程一:神经网络和深度学习 第四周:深度神经网络的关键概念
  • 第171-172天:代理通讯篇无外网或不可达SockS全协议规则配置C2正反向上线解决方案
  • SpringBoot整合缓存1-Ehcache
  • 如何在一台 Linux 机器上管理不同版本的 CMake
  • 90 天打造可持续交付:12 条 DevOps 实践要点与避坑