JavaEE面试题

一、String面试题

1、String s1 = "123"; 和 String s2 = new String("123");的区别

在Java中,"String s1 = "123";"和"String s2 = new String("123");"这两行代码有一些重要的区别:

  1. "String s1 = "123";":这行代码创建了一个字符串常量"123",并将变量s1指向这个字符串。在Java中,使用双引号括起来的字符串字面值会被Java编译器自动放入字符串常量池中。因此,当您创建一个字符串常量时,如果字符串常量池中已经存在相同内容的字符串,则会直接引用这个字符串常量,而不会创建新的对象。
  2. "String s2 = new String("123");":这行代码创建了一个新的String对象,即使用new关键字显式地创建了一个字符串对象,而不是放入字符串常量池。即使字符串常量池中已经存在"123"这个字符串常量,使用new关键字创建的String对象仍会在堆内存中创建一个新的对象。

因此,主要区别在于s1指向的是字符串常量池中的"123"字符串常量,而s2指向的是堆内存中通过new关键字创建的新的String对象。在一般情况下,推荐使用字符串常量的方式,即使用双引号括起来的字符串字面值,因为这样可以利用字符串常量池的优势,提高性能和节省内存。

相关推荐
excel13 小时前
HLS TS 文件损坏的元凶:Git 提交与拉取
前端
Aphasia31113 小时前
https连接传输流程
前端·面试
徐小夕13 小时前
万字长文!千万级文档 RAG 知识库系统落地实践
前端·算法·github
threelab14 小时前
Three.js 物理模拟着色器 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
不知名的老吴14 小时前
线程的生命周期之线程“插队“
java·开发语言·python
kyriewen14 小时前
CSS Container Queries:彻底告别 @media 写到手软,附 5 个真实布局案例
前端·css·面试
ANnianStriver14 小时前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
杨了个杨898214 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
小小小小宇15 小时前
OpenMemory MCP
前端
和平宇宙16 小时前
AI笔记005. hermes-DeepSeek V4 Pro, 128K上下文引发的探索
前端·人工智能·笔记