在面试中以及我们平时的开发中我们都必须要和String类打交道,在java中String类中友很多住的注意的地方,现在就简单的介绍一下:
下面的这个代码就是对String的内存分配以及判断两个对象是否相等
package test;
public class StringTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
String s = new String("abc");
//执行完上面的代码会产生两个对象,一个是在String pool 中,另外一个是在内存的堆里面。
//s指向的是堆中的字符串,
String s1 = "abc";
//s1首先是查找String pool中的字符串。
String s2 = new String("abc");
//用到new都会产生一个新的对象不管它是否已经存在,在堆里面放着。
System.out.println(s == s1); //false s在内存堆里面,s1是在String pool中,所以不相同
System.out.println(s == s2); //false s在内存堆里面,s2也在内存堆里面,但是指向的不是同一个地址,因为s2也用到了new 操作,就会在堆内存中新建立一个对象,
System.out.println(s1 == s2); //false s1是在String pool中,s2在内存堆里面,所以不相同
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAA");//分隔符,
//intern方法是返回一个在String pool中存在的数据
System.out.println(s == s.intern()); //s原来是在堆里面,s.intern()是在String pool中,所以为false
System.out.println(s1 == s2.intern());//s1是在pool中,s2.intern()返回的值也在pool中,所以为 true
System.out.println(s == s2.intern());//s是在堆中,s2.intern()是在pool中,所以为false
System.out.println("BBBBBBBBBBBBBBBBBBBBBBBBBBBB");
String hello = "hello";
String hel = "hel";
String lo = "lo";
//
System.out.println(hello ==( hel + lo));//前面的在String pool中,后面的在堆里面,所以为false。
System.out.println(hello == "hel" + "lo"); //产生的字符串为hello,会在String pool中查找,所以为true ,java对常量的+操作会在编译时进行优化,例如,System.oout.print("h"+"e"+"l"+"l"+"o"=="hello");
返回的结果为true;因为在编译时就将"h"+"e"+"l"+"l"+"o"优化为"hello";
System.out.println(hello == hel +"lo");//前面的在String pool中,后面的在堆里面,所以为false。
}
}
分享到:
相关推荐
java内存分配和String类型的深度解析Java开发Java经验技巧共12页.pdf.zip
Java字符串池(String Pool)深度解析.docx
在java语言的所有数据类型中,String类型是比较特殊的一种类型,同时也是面试的时候经常被问到的一个知识点,本文结合java内存分配深度分析关于String的许多令人迷惑的问题。下面是本文将要涉及到的一些问题,...
如果有多个Word文件,而且放在不同的目录下,要提取它们的文本内容,可以实现一个递归的函数,通过深度遍历,为每一个Word文件进行提取。 如果需要,可以将提取到的Word文件的文本内容输出到本地磁盘中,比如以txt...
五、Object的方法介绍和String解析 有的同学要问了,Object和String是我们这一块儿日常一直在使用的东西,为什么要单独拎出来讲呢?其实,他们使用起来虽然简单,但比如Object类是位于java.lang包中的,java.lang是...
73 Spring源码深度解析.pdf 74 Tomcat架构解析文档.pdf 75 Tomcat架构解析文档.pdf.baiduyun.downloading 76 Tomcat面试专题.pdf 77 Tomcat优化相关问题.pdf 78 Zookeeper+分布式过程.pdf 79 zookeeper面试专题.pdf ...
类加载机制深度解析 Jvm Java 类加载机制深度解析 wenhao, 文浩 , Jvm, classLoader , Java 准备: Markdown编写工具 有道云笔记 Idea开发工具 GItHub项目地址 分析: 类加载运行全过程: 当我们用java命令运行某个...
一些工具类代码块的标准代码,包括但不...把json解析成list,如果list内部的元素存在jsonString,继续解析 与javaBean json数组字符串转换为列表 获取泛型的Collection Type map 转JavaBean map 转json map 转JavaBean
深度模型类识别 异步使用 内容缓存 默认错误对话框 =====示例===== 示例1-简单的单个模型类-您需要做的第一件事是创建模型类。 让我们创建仅具有一个属性的简单Planet类。 所有模型类都需要扩展基础模型类。 ...
import java.net.URL; import com.sosoo.robot.http.DownloadRuleSet; import com.sosoo.robot.http.HttpDocManager; import com.sosoo.robot.http.HttpDocToBean; import ...
如果去面SDE职位,估计这深度就差不多了,我这文章不是面向那些要去面Senior SDE甚至Dev Lead的正神,咱这儿庙小,嘿嘿! 总之: 1. 值类型的数据存储在内存的栈中;引用类型的数据存储在内存的堆中,而内存单元中...
深度解析Asp.Net2.0中的Callback机制 使用 Web 标准生成 ASP.NET 2.0 Web 站点 ASP.NET 2.0基于SQLSERVER 2005的aspnetdb.mdf部署 ASP.NET 2.0 Security FAQs Asp.net 2.0功能体验,细节之Web控件(一) 隐藏控件 ...