String a="a";
String b="b";
String c="ab";
String d="ab";
String e=a+b;

程序中用来存放数据的内存分为四块
1、全局区(静态区)(static)
2、文字常量区 :常量字符串就是放在这块区域,即是我们常说起的常量池。
3、栈区(stack):存放函数的参数值,局部变量的值等。
4、堆区(heap) : 存放对象

当我们定义字符串
String a = "a";
a在栈区,“a”是字符串常量,在常量池中
String b = "b";
b在栈区,“b”在常量池
String c="ab";
c在栈区,“ab”在常量池
String d="ab";
d在栈区,这个时候常量池里已经有"ab",所以直接使用已经有的那个“ab”
所以这个时候c和d都指向的常量池里面的同一个“ab”
String e=a+b;
e在栈区,a+b实际上产生了一个新的String对象,既然是String对象,所以结果“ab”放在堆区中,即e指向的是堆里的“ab”
这样的情况下,c==d为true,c==e为false
////////////////////////////////////
另外,如果定义的是字符串对象
String str1 = new String("ab");
str1在栈区,创建的“ab”字符串对象在堆区
String str2 = new String("ab");
str2在栈区,又创建的一个新的“ab”对象也在堆区,不过和刚才的“ab”不是同一个。
相当于堆区中有两个字符串对象,不过正好内容都是“ab”而已。

所以str1==str2为false

常量池里面放着的常量字符串可以重复使用,但是必须是你直接使用的该字符串,像a+
b这种形式虽然得到的结果是“ab”,但并不是使用的字符串常量“ab”

转自:http://blog.sina.com.cn/s/blog_4b622a8e0100c296.html

最新文章

  1. 阿里云直播 C# SDK 如何使用
  2. Python类中super()和__init__()的关系
  3. ubuntu 安装 swoole 和mac 安装swoole 扩展
  4. SPRING IN ACTION 第4版笔记-第十章Hitting the database with spring and jdbc-004-使用NamedParameterJdbcTemplate
  5. Android发送请求到不同的Servlet,但都是一个Servlet处理
  6. SSL构建单双向https认证
  7. IOS 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: URLString'
  8. 详细解析 RxAndroid 的使用方式
  9. 捉Bug:易车注册页布局小臭虫 附demo
  10. Struts2如何传值到jsp页面
  11. Redis大幅性能提升之Batch批量读写
  12. git命令的使用
  13. hdu_3483A Very Simple Problem(C(m,n)+快速幂矩阵)
  14. mysql大小写敏感(默认为1,不敏感)
  15. 数码相框(LCD、I2C)
  16. mac下git安装与使用
  17. 如何利用redis来进行分布式集群系统的限流设计
  18. Keepalived详解(五):Keepalived集群中MASTER和BACKUP角色选举策略【转】
  19. Eclipse插件的安装(手动安装),以安装SVN插件和中文语言包为例
  20. 简单实现Spring框架--注解版

热门文章

  1. auto create statistic script
  2. Uva 11491 暴力贪心
  3. 【[ZJOI2008]骑士】
  4. Android学习笔记_72_Spinner的用法
  5. Java基础——XML复习
  6. Oracle客户端与Toad、plsql developer安装
  7. update、commit、trancate,delete
  8. zepto 基础知识(1)
  9. [SHOI2015]脑洞治疗仪(恶心的线段树,区间最大子段和)
  10. Python3集成安装xadmin