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

相关推荐
Moyo2035 分钟前
前端 -- react快速入门
前端·react.js·前端框架
東雪木8 分钟前
java学习—— 8 种基本数据类型 vs 包装类、自动装箱 / 拆箱底层原理
java·开发语言·java面试
whuhewei8 分钟前
在React中实现CSS动画的回放
前端·css·react.js
Lyyaoo.9 分钟前
【JAVA基础面经】JVM、JRE、JDK
java·开发语言·jvm
左左右右左右摇晃11 分钟前
ConcurrentHashMap 设计原理笔记
java·开发语言·笔记
keyborad pianist20 分钟前
包装类、泛型、集合
java
北海军20 分钟前
render el-select下拉框
前端·javascript·vue.js
华科易迅24 分钟前
Spring装配对象方法-构造方法
java·后端·spring
是小蟹呀^30 分钟前
Java 内部类详解:成员内部类、静态内部类、局部内部类与匿名内部类
java·内部类
We་ct39 分钟前
LeetCode 4. 寻找两个正序数组的中位数:二分优化思路详解
前端·数据结构·算法·leetcode·typescript·二分