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

相关推荐
程序员张326 分钟前
Maven编译和打包插件
java·spring boot·maven
ybq195133454311 小时前
Redis-主从复制-分布式系统
java·数据库·redis
weixin_472339462 小时前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴8502 小时前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
zwjapple2 小时前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
DKPT3 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好奇的菜鸟4 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
像风一样自由20205 小时前
HTML与JavaScript:构建动态交互式Web页面的基石
前端·javascript·html
aiprtem5 小时前
基于Flutter的web登录设计
前端·flutter
DuelCode5 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis