首先看一个例子(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技术:Java String常见问题解析
NULL 博文链接:https://1017401036.iteye.com/blog/2254375
全面解析Java中的String类的使用,对java中String进行了非常全面的解析~而且全部附上了详细实例~非常经典
包括pom文件导入依赖,封装解析文件java类完整版,源yaml文件等
Educoder题目:Java面向对象 - String类答案解析
解析Java中的String对象的数据类型 字符串 对java初学者 很实用的
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.Reader; /** * @author...
java 解析Excel 并判断解析的数据类型__Eclipse工程,纯手工,无复制
String StringBuffer和StringBuilder 区别之源码解析 从源码角度简单对它们之间的区别进行了验证
java中Object对象String对象的解析.pdf
以下是对java中String的一些方法进行了详细的分析介绍,需要的朋友可以参考下
* 解析某个xml文件,并在内存中创建DOM树 * @param xmlFile 要解析的XML文件 * @return 解析某个配置文件后的Document * @throws Exception xml文件不存在 */ public static Document parse( String xml...
JAVA 对word 内容的提取返回String 的代码 两种方式详细的资源描述有机会获得我们的推荐,更有利于他人下载,赚取更多积分
java内存分配和String类型的深度解析Java开发Java经验技巧共12页.pdf.zip
主要介绍了Java中关于String全面解析,下面我们来一起学习一下吧
java文档String和StringTokenizer 马克-to-win java视频 字符串解析器
java读取数据库表中内容转存sql文件,然后解析执行此文件
主要介绍了Java中String类(字符串)操作的10个常见问题,需要的朋友可以参考下
java dom4j 解析xml的例子,可用,另外内涵一个帮助类,其功能是:根据某个java工程中的文件名,获取这个文件在java工程中的绝对路径。解压加载到myeclipse上可用。