首先看一个例子(java) :
string str1 = "name" ;
string str2 = "name" ;
string str3 = new string("name") ;
string str4 = new string("name") ;
System.out.println(str1 == str2) ;
System.out.println(str2 == str3) ;
System.out.println(str3 == str4) ;
System.out.println(str1.equals(str2)) ;
System.out.println(str1.equals(str3)) ;
结果为true ,false ,false , true , true
在java中,对于“==”,如果是基本数据类型,比较的是对象的值,如果是用户自定义类型,则比较的对象的地址。equals()才比较的对象的值。这样,哦,只有str1 ,str2 的地址相同.
为什么呢?原来在java中,为了提高内存利用率,产生了一个字符串池。当遇到“string str1 = "name"”,这样的语句时,系统就会首先在字符串词中查找是否有“name"这个字符串。如果有,则将其赋给str1.否则,就在字符串池中,新建一个“name"字符串,并将她赋给str1.现在明白str1,str2为什么
指向同一份内存空间了。
当遇到“string str3 = new string("name") ;”语句时,系统就在堆中为该字符串,分配一段内存空间,注意不是在字符串池中。
在String 中有个intern()函数,她能够将该string对象的字符串在字符串池中从新复制(注意前提是在此之前,字符串池中并没有该字符串)一份,并返回该string对象的引用。
具体分析:
string str3 = new string("name") ;
str3 = str3.intern() ;
当调用intern()方法时,如果池中已包含该string对象的字符串,那么就返回该池中string对象的引用。
注意在堆中"name"字符串仍然存在(此处有内存泄露之嫌,没关系,JAVA中有强大的垃圾回收机制)。如果池中没有,就在池中新建一个该string对象的字符串。
eg:
string str = "name" ;
string str1 = new string("name") ;
string str2 = new string("name") ;
str1.intern() ;
str2 = str2.intern() ;
System.out.println(str == str1) ;
System.out.println(str == str2) ;
结果是:false ,true
分享到:
相关推荐
在Java编程语言中,`String`类是使用最频繁的类之一,它代表不可变的字符序列。本文将深入解析`String`类的一些常用方法,帮助开发者更好地理解和使用这个核心类。 1. **构造方法** - `String()`:创建一个空字符...
本文将深入探讨如何在Java中解析YAML文件,包括依赖管理、封装解析类以及源码分析。 首先,为了在Java项目中使用YAML解析功能,我们需要引入相关的库。在Maven项目中,可以在`pom.xml`文件中添加SnakeYAML的依赖: ...
本文将深入探讨如何在Java中解析JSON字符串,以满足后端处理前端传递的数据需求。 首先,理解JSON的基本结构至关重要。JSON格式通常包含键值对,可以是对象(用花括号 `{}` 包裹)或数组(用方括号 `[]` 包裹)。...
本文将深入探讨Java中String类型和int类型之间的比较方法以及相互转换的技术,这对于理解和优化代码逻辑、提升程序性能具有重要意义。 ### 一、String类型与int类型的基本概念 #### 1.1 String类型 String类型在...
### Java对MHT文件解析及内容抓取技术详解 #### 一、引言 MHT(Mime HTML)文件是一种将HTML文档与嵌入资源(如图像、样式表等)合并为一个文件的格式,方便在网络上传输。本文将详细介绍如何使用Java语言解析MHT...
### Java中String、十六进制String与byte[]之间的相互转换 在Java开发中,字符串(String)、十六进制表示的字符串以及字节数组(byte[])之间的转换是非常常见的需求,尤其是在处理网络通信、文件读写等场景下。...
可以使用 Java 中的 DOM 或 SAX 解析器来解析 Word 文档中的书签。首先,需要解析 document.xml 文件,找到 `<w:bookmarkStart>` 标签,然后找到其兄弟节点 `<w:r>` 标签,最后找到 `<w:t>` 标签,并将其内容替换为...
Java 中颜色的 String 和 Color 对象之间的互相转换 在 Java 中,颜色的表示形式有多种,包括字符串形式和 Color 对象形式。这两种形式可以互相转换,本文将介绍 Java 中颜色的 String 和 Color 对象之间的互相转换...
Java的SQL解析器JSQLPaser是一个强大的开源库,专门设计用于处理SQL语句的解析工作。这个库允许开发者分析SQL语句的结构,提取出其中的关键元素,如列名、表名、别名以及查询条件,从而在Java应用程序中实现对SQL的...
在Java中,字符串是我们经常使用的数据类型,而String、StringBuffer和StringBuilder是Java中三种常用的字符串类。在这篇文章中,我们将从源码角度对String、StringBuffer和StringBuilder进行深入分析,了解它们之间...
Java 中的 String 类是 Java 编程语言中最基本的类之一,用于表示字符串。它在 java.lang 包中,是所有 Java 程序的默认一部分。String 类是不可变的,这意味着一旦创建了 String 对象,就不能更改它所包含的字符...
Java地址解析和反向地址解析是网络编程中的关键概念,主要涉及到网络通信中IP地址与域名之间的转换。本文将深入探讨这两个主题,并提供相关的实践应用示例。 **一、地址解析** 地址解析,通常指的是DNS(Domain ...
解析Java中的String对象的数据类型字符串 Java中的String对象是一种特殊的数据类型,它不同于基本数据类型,也不同于其他对象。String对象的默认值是null,但它又是一种特殊的对象,有其它对象没有的一些特性。 ...
本篇将详细介绍如何使用Java和AAPT(Android Asset Packaging Tool)来解析APK,尤其适用于处理加密或加壳的APK。 首先,APK实际上是一个ZIP格式的压缩包,包含了AndroidManifest.xml、资源文件、dex字节码等。传统...
在Java编程环境中,解析Excel文件是一项常见的任务,特别是在数据处理、数据分析或自动化测试等领域。Eclipse作为Java开发的主流IDE,提供了丰富的工具和支持来完成这项工作。本项目名为"java 解析Excel 并判断解析...
### JAVA中String与byte[]的关系解析 在Java编程语言中,`String`对象与`byte[]`数组之间的转换是常见的操作之一。理解这两者之间的关系对于处理文本数据、网络通信及文件读写等任务至关重要。 #### 一、String与...
本文将深入探讨如何使用PDFBox库在Java中解析PDF并读取其内容。 PDFBox是Apache软件基金会的一个开源项目,它为Java开发者提供了一系列API来操作PDF文档,包括读取、创建、编辑以及签署PDF等任务。在本示例中,我们...
为了读取和解析 DBF 文件,需要使用 Java 语言中的数据库连接和 SQL 语句。 在这个方案中,我们可以使用两种方法来解析 DBF 文件:一种是使用 ODBC 驱动来连接 DBF 文件,另一种是使用 javadbdf 库来直接读取 DBF ...
本文将详细讲解如何在Java中解析XML,特别是针对多级结构的情况。 首先,Java提供了两种主要的API来处理XML:DOM(文档对象模型)和SAX(简单API for XML)。DOM解析器会将整个XML文件加载到内存中,形成一个树形...