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对象。在一般情况下,推荐使用字符串常量的方式,即使用双引号括起来的字符串字面值,因为这样可以利用字符串常量池的优势,提高性能和节省内存。

相关推荐
还是大剑师兰特1 分钟前
Vue3 中 computed(计算属性)完整使用指南
前端·javascript·vue.js
我真会写代码6 分钟前
深入理解JVM GC:触发机制、OOM关联及核心垃圾回收算法
java·jvm·架构
本喵是FW13 分钟前
C语言手记1
java·c语言·算法
井川不擦17 分钟前
前端安全通信方案:RSA + AES 混合加密
前端
孜孜不倦不忘初心19 分钟前
Ant Design Vue 表格组件空数据统一处理 踩坑
前端·vue.js·ant design
AD_wjk19 分钟前
Android13系统集成方案
前端
Joyee69120 分钟前
RN 的新通信模型 JSI
前端·react native
somebody21 分钟前
零经验学 react 的第6天 - 循环渲染和条件渲染
前端
洛阳泰山21 分钟前
MaxKB4j Docker Compose 部署指南
java·docker·llm·springboot·rag·maxkb4j
青晚舟22 分钟前
AI 时代前端还要学 Docker & K8s 吗?我用一次真实部署经历说清楚
前端·github