`
SunnyYoona
  • 浏览: 386586 次
社区版块
存档分类
最新评论

[细说Java](3)创建字符串是使用" "还是构造函数?

 
阅读更多
在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”已经是字符串类型,那么使用构造函数方式只会创建一个额外没有用处的对象。
因此,如果你只需要创建一个字符串,你可以使用双引号的方式,如果你需要在堆中创建一个新的对象,你可以选择构造函数的方式。































分享到:
评论

相关推荐

    细说Java NIO

    1. **打开通道**:使用`java.nio.channels.FileChannel`、`java.net.SocketChannel`和`java.nio.channels.ServerSocketChannel`等类创建通道。 2. **创建缓冲区**:`java.nio.ByteBuffer`是最常用的缓冲区类型,...

    细说java线程问题

    ### 细说Java线程问题:深入理解与实践 在Java编程中,线程是执行的基本单位,它允许程序在操作系统层面并发执行多个任务。掌握Java线程的原理及其使用方法,对于提升软件性能和响应性至关重要。本文将从线程的概念...

    细说Java之常用集合类

    所有实现了`Collection`接口的类都必须提供两个标准的构造函数:一个是无参数的构造函数,用于创建一个空的集合;另一个则接受一个`Collection`类型的参数,用于创建一个包含与传入集合相同元素的新集合,这允许用户...

    细说Java之util类.

    Java中的`util`类是Java开发中不可或缺的一部分,它们提供了许多数据结构和工具类的实现,使得开发者可以方便地处理各种数据。`java.util`包是Java标准库的核心部分,包含了许多用于处理集合、时间日期、随机数生成...

    细说PHP第二版高洛峰.7z

    - 构造函数和析构函数:`__construct()` 和 `__destruct()` 分别在对象创建和销毁时自动调用。 7. 错误处理和异常处理: - 错误报告:通过 `error_reporting()` 设置错误级别。 - 异常处理:使用 `try...catch` ...

    《细说php》光盘源码

    2. **字符串与数组操作**:PHP对字符串和数组有丰富的处理函数,源码中会展示如何进行字符串拼接、查找、替换,以及数组的创建、遍历、排序等操作。 3. **文件与目录操作**:学习如何在PHP中读取、写入、创建、删除...

    细说Java之常用集合类.rar

    Java是一种广泛使用的面向对象的编程语言,其丰富的库和强大的集合框架是其核心特性之一。本文将深入探讨Java中的常用集合类,包括ArrayList、LinkedList、HashSet、HashMap等,以及它们的特点、用途和实现原理。 ...

    细说PHP 源码

    3. **字符串操作** - 字符串可以用单引号或双引号创建,双引号内的变量会被解析。 - `strlen()`返回字符串长度,`str_replace()`替换子串,`strpos()`查找子串位置。 - `explode()`和`implode()`分别用于字符串...

    《细说PHP》配套源码

    1. **基础语法**:源码中包含了PHP的基础语法示例,如变量声明、数据类型(字符串、整型、浮点型、数组、布尔型、NULL)、流程控制(条件语句、循环结构)以及函数的使用。 2. **字符串操作**:PHP对字符串处理提供...

    细说php源码

    3. **文件与目录操作**:在《细说PHP》的源码中,我们可能会看到如何读取、写入、创建、删除文件,以及如何操作目录(mkdir, rmdir, chdir等)的示例,这些都是PHP在Web开发中的常见应用。 4. **数据库交互**:PHP...

    《细说PHP》光盘源码

    《细说PHP》的源码中可能会包含各种内置函数的示例,如字符串处理函数(如strlen、str_replace)、数组操作函数(如array_push、array_pop)以及日期和时间处理函数(如date、strtotime)。此外,自定义函数的编写也...

    细说php课后答案

    8. **字符串处理与正则表达式**:字符串处理函数如str_replace、substr、explode等,以及正则表达式的使用,是处理和验证输入数据的重要工具。 9. **PHP常用功能模块**:涉及文件上传、错误处理、邮件发送、日期...

    《细说PHP》

    理解数据库设计的基本原理,如数据表的创建、数据的增删改查,以及关系数据库的概念,对提高后端开发能力非常有帮助。 此外,《细说PHP》还可能包含对PHP中常用的设计模式的介绍,设计模式是解决软件设计中常见问题...

    细说PHP配套源码

    比如,`file_get_contents()`函数用于读取文件内容,`json_encode()`和`json_decode()`用于JSON数据的编码和解码,`explode()`用于字符串分割等。 此外,源码还会涉及面向对象编程(OOP)的概念。PHP5及以后版本...

    《细说PHP(第2版)》

    书中涵盖了变量、常量、数据类型(如字符串、整型、浮点型、布尔型、数组、对象等)、运算符、流程控制(条件语句、循环语句)、函数的使用等基础内容。 3. PHP字符串处理:字符串在Web开发中扮演重要角色,书中...

    细说php精要版

    在PHP的世界里,首先我们需要理解其基础语法,包括变量声明、数据类型(如字符串、整型、浮点型、布尔型、数组、对象等)、流程控制(如条件语句if/else、循环结构for、while、do/while等)以及函数的使用。...

    细说php16-20章

    `.$`运算符用于字符串连接,`strlen()`函数计算字符串长度,`substr()`函数用于截取字符串,`strpos()`和`strrpos()`查找子串位置,以及`str_replace()`进行字符串替换。此外,你还将接触到PHP的字符串格式化功能,...

    《细说Android 4.0 NDK编程》PDF

    《细说Android 4.0 NDK编程》是一本深入探讨Android Native Development Kit(NDK)的书籍,专为Android开发者提供关于NDK使用的详细指南。NDK是Google推出的一个工具集,允许开发者使用C/C++等原生代码在Android...

    细说php6-10章

    学会创建、遍历和操作数组,以及数组函数的使用,对于处理大量数据非常有用。 第十章:面向对象编程 这是PHP的高级特性,包括类、对象、属性、方法、继承、封装、多态等概念。面向对象编程让代码结构更清晰,易于...

Global site tag (gtag.js) - Google Analytics