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

相关推荐
长谷深风11120 小时前
Java并发编程:线程安全与多线程实战指南【个人八股】
java·安全·线程·进程·juc·并发与并行·上下文切换(性能影响因素)
basketball61620 小时前
C++ 强制类型转换:从 C 风格到 C++ 四大金刚
java·c语言·c++
还有多久拿退休金21 小时前
dnd-kit 碰撞检测算法:你的订单为什么自己"跑"到了 1 号?
前端
qq_3168377521 小时前
npm run tauri build Downloading下载超时
前端·npm·node.js
w_t_y_y21 小时前
VUE3(二)VUE2和VUE3区别
前端·javascript·vue.js
T-shmily21 小时前
使用svg图标
前端·css
阿明在折腾21 小时前
在浏览器里实现 PDF 合并与拆分:pdf-lib 实战指南
前端·javascript
米高梅狮子21 小时前
03.OpenStack使用
linux·前端·云原生·容器·架构·kubernetes·openstack
Dicky-_-zhang21 小时前
容器网络CNI实战:从零搭建网络插件
java·jvm
Mahir0821 小时前
Spring 事务深度解析:核心原理与 12 种事务失效场景全解
java·spring·面试·事务失效