灵魂拷问:创建 Java 字符串,用""还是构造函数
2024-09-01 20:15:42
在逛 programcreek 的时候,我发现了一些小而精悍的主题。比如说:创建 Java 字符串,用 "" 还是构造函数?像这类灵魂拷问的主题,非常值得深入地研究一下。
01、""
来看这样一串代码:
String a = "沉默王二";
String b = "沉默王二";
System.out.println(a == b); // true
System.out.println(a.equals(b)); // true
a==b
是因为 a 和 b 指向的是方法区中同一个字符串常量值。当相同的字符串被创建多次时,只会保存字符串常量的一份副本。画个图表示一下。
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 指向的是堆中不同的字符串对象,不同的对象,它们的对象引用也是不同的。画个图表示一下。
03、总结
字符串“沉默王二”本身已经是一个字符串类型,再通过 new 关键字通过构造函数创建字符串对象就显得多此一举。所以,如果你只需要一个字符串对象,使用双引号——"" 即可。除非你想在堆中创建一个新的字符串对象。
最后,谢谢大家的阅读。后续还会继续更新《灵魂拷问》系列,我想带着大家在“知其所以然”方面多下下功夫。
最新文章
- What&#39;s the difference between <;b>; and <;strong>;, <;i>; and <;em>; in HTML/XHTML? When should you use each?
- BAT脚本打印空行的使用方法
- JavaWeb基础: XML基础知识
- Eclipse NDK 配置
- HDU 1465 不容易系列之一(错排,递归)
- 一个python
- libyuv颜色空间转换开源库
- 【高精度+DP】【HDU1223】 OrderCount
- C# 编译器选项 /platform(指定输出平台)32位程序运行到x64平台的问题
- 【WebGL】《WebGL编程指南》读书笔记——第4章
- 提取位于<;title>;...<;/title>;内的文本标题内容
- @EnableTransactionManagement注解理解
- 什么是“闭包”(closure)为什么要用它?
- vue.js实战——$event
- VMWare的host-only/bridged/NAT连接图文介绍
- c++ <;stdarg.h>; 解决变参问题的宏定义;
- 【原创】DMA
- 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器
- HttpRequest获得服务端和客户端的详细信息
- pip升级包错误问题解决