灵魂拷问:创建 Java 字符串,用""还是构造函数

简介: 灵魂拷问:创建 Java 字符串,用""还是构造函数

在逛 programcreek 的时候,我发现了一些小而精悍的主题。比如说:创建 Java 字符串,用 “” 还是构造函数?像这类灵魂拷问的主题,非常值得深入地研究一下。


01、""


来看这样一串代码:


String a = "沉默王二";

String b = "沉默王二";

System.out.println(a == b);  // true

System.out.println(a.equals(b)); // true



a==b 是因为 a 和 b 指向的是方法区中同一个字符串常量值。当相同的字符串被创建多次时,只会保存字符串常量的一份副本。画个图表示一下。


image.png


02、构造函数


来看这样一串代码:


String a = new String("沉默王二");
String b = new String("沉默王二");
System.out.println(a == b);  // false
System.out.println(a.equals(b)); // true


a≠b 是因为 a 和 b 指向的是堆中不同的字符串对象,不同的对象,它们的对象引用也是不同的。画个图表示一下。


image.png


03、总结


字符串“沉默王二”本身已经是一个字符串类型,再通过 new 关键字通过构造函数创建字符串对象就显得多此一举。所以,如果你只需要一个字符串对象,使用双引号——"" 即可。除非你想在堆中创建一个新的字符串对象。


最后,谢谢大家的阅读,原创不易,喜欢就点个赞,这将是我最强的写作动力。后续还会继续更新《灵魂拷问》系列,我想带着大家在“知其所以然”方面多下下功夫。


相关文章
|
26天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
137 83
|
1月前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
108 60
|
26天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
53 26
|
1月前
|
存储 安全 Java
Java灵魂拷问13个为什么,你都会哪些?
大家好,我是 V 哥。今天分享 13 个 Java 编程中的常见问题,包括 `BigDecimal` 的 `equals` 方法、`HashMap` 初始化容量、`Executors` 创建线程池等。这些问题都是 V 哥在日常编码中总结的经验,希望能帮助大家提升代码质量和性能。如果内容对你有帮助,请点赞关注,让我们在 Java 路上共同进步。
Java灵魂拷问13个为什么,你都会哪些?
|
1月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
46 8
|
1月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
49 6
|
1月前
|
存储 Java 程序员
Java灵魂拷问13个为什么,你都会哪些?
【11月更文挑战第6天】本文回答了一些常见的 Java“灵魂拷问”,包括 Java 跨平台的原因、垃圾回收机制的作用、接口不能有实例变量的原因、字符串不可变的好处、异常处理机制的意义、类加载机制的双亲委派模型、多线程同步机制的重要性、重写方法访问修饰符的限制、包装类的存在意义、`equals()` 和 `hashCode()` 方法一起重写的原因、静态方法不能被重写的原因、`ArrayList` 扩容策略的权衡,以及 `final` 关键字的多种用途。
|
2月前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
58 15
|
2月前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
59 4
|
3月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
57 3