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

相关推荐
ohMyGod_1233 分钟前
React16,17,18,19新特性更新对比
前端·javascript·react.js
前端小趴菜056 分钟前
React-forwardRef-useImperativeHandle
前端·vue.js·react.js
@大迁世界6 分钟前
第1章 React组件开发基础
前端·javascript·react.js·前端框架·ecmascript
Hilaku9 分钟前
从一个实战项目,看懂 `new DataTransfer()` 的三大妙用
前端·javascript·jquery
爱分享的程序员13 分钟前
前端面试专栏-算法篇:20. 贪心算法与动态规划入门
前端·javascript·node.js
我想说一句14 分钟前
事件委托与合成事件:前端性能优化的"偷懒"艺术
前端·javascript
爱泡脚的鸡腿16 分钟前
Web第二次笔记
前端·javascript
良辰未晚16 分钟前
Canvas 绘制模糊?那是你没搞懂 DPR!
前端·canvas
Dream耀20 分钟前
React合成事件揭秘:高效事件处理的幕后机制
前端·javascript
P7Dreamer21 分钟前
Vue 3 + Element Plus 实现可定制的动态表格列配置组件
前端·vue.js