在逛 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 关键字通过构造函数创建字符串对象就显得多此一举。所以,如果你只需要一个字符串对象,使用双引号——"" 即可。除非你想在堆中创建一个新的字符串对象。

最后,谢谢大家的阅读。后续还会继续更新《灵魂拷问》系列,我想带着大家在“知其所以然”方面多下下功夫。

最新文章

  1. What's the difference between <b> and <strong>, <i> and <em> in HTML/XHTML? When should you use each?
  2. BAT脚本打印空行的使用方法
  3. JavaWeb基础: XML基础知识
  4. Eclipse NDK 配置
  5. HDU 1465 不容易系列之一(错排,递归)
  6. 一个python
  7. libyuv颜色空间转换开源库
  8. 【高精度+DP】【HDU1223】 OrderCount
  9. C# 编译器选项 /platform(指定输出平台)32位程序运行到x64平台的问题
  10. 【WebGL】《WebGL编程指南》读书笔记——第4章
  11. 提取位于<title>...</title>内的文本标题内容
  12. @EnableTransactionManagement注解理解
  13. 什么是“闭包”(closure)为什么要用它?
  14. vue.js实战——$event
  15. VMWare的host-only/bridged/NAT连接图文介绍
  16. c++ <stdarg.h> 解决变参问题的宏定义;
  17. 【原创】DMA
  18. 在Linux(CentOS 6.6)服务器上安装并配置基于Apache的SVN服务器
  19. HttpRequest获得服务端和客户端的详细信息
  20. pip升级包错误问题解决

热门文章

  1. shell 替换文本中的某个符号为换行符
  2. shell 脚本运行 hive sql
  3. Xcode编译引用Framework
  4. (全国多校重现赛一)E-FFF at Valentine
  5. ARTS-S docker安装miniconda
  6. BGA256芯片植球全过程体验(原创)
  7. 最新设计打样制作完成的FPGA视频开发板VIP—V101
  8. LeetCode--300. 最长递增子序列
  9. 【Web技术】 275- 理解 WebView
  10. JMeter之SteppingShape