在Java中,可以使用两种方式创建字符串:

String x = "abc";
String y = new String("abc");

对于这两种方式(双引号,构造函数)它们到底有什么区别呢?

1. 双引号 vs 构造函数
这个问题可以使用这两个简单代码实例来回答:
实例一
String a = "abcd";
String b = "abcd";
System.out.println("a == b : "+(a == b)); // true
System.out.println("a.equals(b) : "+(a.equals(b))); // true

a== b等于true 是因为x和y指向方法区中同一个字符串常量,内存引用是相同的。

当相同的字符串常量被多次创建时,只会保存字符串常量的一份副本,这称为“字符串驻留”。在Java中,所有编译时字符串常量都是驻留的。
实例二
String c = new String("abcd");
String d = new String("abcd");
System.out.println("c == d : "+(c == d)); // false
System.out.println("c.equals(d) : "+(c.equals(d))); // true

c== d等于false 是因为c和d指向堆中不同的对象。不同的对象拥有不同的内存引用。

下面图论证了以上的结论。
2. 运行时字符串驻留
运行时也会发生字符串驻留,即使两个字符串是由构造函数方法创建的。
String c = new String("abcd").intern();
String d = new String("abcd").intern();
System.out.println("c == d : "+(c == d)); // true
System.out.println("c.equals(d) : "+(c.equals(d))); // true (JDK1.7)

如果字面值“abcd”已经是字符串类型,那么使用构造函数方式只会创建一个额外没有用处的对象。
因此,如果你只需要创建一个字符串,你可以使用双引号的方式,如果你需要在堆中创建一个新的对象,你可以选择构造函数的方式。
原文链接:Create Java String Using ” ” or Constructor?

[细说Java](3)创建字符串是使用quot; quot;还是构造函数?相关推荐

  1. java 怎样创建字符串数组_Java 创建并声明字符串数组

    public class ArrayOfStringsDemo { public static void main(String[] args) { /**来自 n o w j a v a . c o ...

  2. Java中的字符串程序

    String is the most widely used class in java programming. That's why String programs are used in jav ...

  3. java字符串拼接_为什么阿里巴巴不建议在for循环中使用quot;+quot;进行字符串拼接...

    点击上方"Java专栏",选择"置顶或者星标" 第一时间阅读精彩文章! ☞ 程序员进阶必备资源免费送「21种技术方向!」 点击查看☜ 字符串,是 Java 中最 ...

  4. java字符串底层实现_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...

    Java基础之字符串操作--String 字符串 什么是字符串?如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列.为了更好的理解以上的理论,我们先来解释下字符序列,字符序列:把多个字符按 ...

  5. android string拼接字符串_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...

    Java基础之字符串操作--String 字符串 什么是字符串?如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列.为了更好的理解以上的理论,我们先来解释下字符序列,字符序列:把多个字符按 ...

  6. Java · 认识 String 类(上)· 创建字符串 · 字符串比较相等 · 字符串常量池 · 字符串不可变 · 字符字节与字符串

    目录 一.创建字符串 二.字符串比较相等 三.字符串常量池 3.1 直接赋值的内存情况 3.2 采用构造方法的内存情况 四.理解字符串不可变 五.字符.字节与字符串 5.1 字符与字符串 5.2 字节 ...

  7. 【浅刷Java数据结构】Leetcode 606 根据二叉树创建字符串

    链接: Leetcode 606 根据二叉树创建字符串 整体思路: 题目要求按照前序遍历的方式遍历.(根(左子树)(右子树)) 根为空直接返回. 根不为空时:看左右子树是否空,就可以分类讨论: 左树为 ...

  8. 细说Java性能测试第一课 Jmeter导读

    细说java性能测试 课前导读 作为一个测试从业者,如何在有限的测试时间里保证交付物的质量一直是绕不开的话题,性能测试作为质量保障的一部分,自然也有着重要的地位.这一讲作为本课程的导读,我想带你相对全 ...

  9. 细说Java主流日志工具库

    细说 Java 主流日志工具库 日志框架 java.util.logging (JUL) Log4j Logback Log4j2 Log4j vs Logback vs Log4j2 日志门面 co ...

最新文章

  1. 基于深度学习的端到端人脸识别技术:全面调研
  2. 【C++ 语言】面向对象 ( 函数重载 | 运算符重载 | 运算符重载两种定义方式 | 拷贝构造方法 | RVO 优化 | NRVO 优化 )
  3. 从零开始使用Realsense D435i运行VINS-Mono
  4. 7.定义一个有80个元素的字符数组,从键盘输入一串字符,将其中的大写字母转换为小写字母,而将原来为小写的字母转换为大写字母,其他字符不变。
  5. 解决浏览器存储问题,不得不了解的cookie,localStorage和sessionStorage
  6. ES6箭头函数(节选自《ECMAScript 6 入门》)
  7. 数据科学家:我的工作就是发现别人未知的
  8. 分析按键序列以执行不同功能。但又从中抽象出来一个,暂时不知道还能用作别的不。...
  9. CHR-6dm datasheet 中文翻译
  10. json文件使用tips
  11. 虚拟机下liunx安装jdk
  12. 【JS】顶部悬浮及缓慢回到顶部
  13. win7系统下文件夹重命名提示找不到该项目:的解决!
  14. y的花式写法_26字母的花式写法可复制 也叫圆体字写法如下一基本规则
  15. 统计检测(statistical tests)
  16. 手机上微信总是说无法连接服务器错误代码,微信登录失败怎么办|微信登录失败常见提示及处理方法...
  17. 2020牛客暑期多校训练营(第九场)——Groundhog and 2-Power Representation
  18. 关机闹钟原理,Android和Iphone关机闹钟
  19. 【Python常用函数合集】clip函数、range函数等
  20. css预处理器-stylus 很少人用

热门文章

  1. Windows Server 2008 R2 Server Core文件操作命令
  2. 深入理解 ASP.NET 动态控件 (Part 5 - 编译实验)
  3. 在html中写三角,css3怎么写三角形?
  4. centos mysql php tomcat_CentOS 6.x使用yum快速安装Apache+PHP+Tomcat(JSP)+MySQL
  5. mysql 如何选择2行_MYSQL – 从大表中的第二行中选择数据
  6. c语言计算火车的运行时间_C++火车入轨算法的实现代码
  7. sm2算法前端处理_Postman接口自动化测试实例用到的完整的SM2前端加密算法代码...
  8. 零基础学UI设计,正确的学习方法讲解!
  9. python yield from_简述 yield 和 yield from
  10. 灰度重采样的方法分为_DSA医疗影像增强技术特点及方法