【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder
1、String
1.1 不可变性
// 在堆中会创建一个"Hello"字符串实例,把地址赋给对象a
String a = new String("Hello");
// 在堆中又重新创建了一个"World"字符串实例,把新地址赋给对象a
a = new String("World");
经过上述操作,字符串"World"并不是在原字符串"Hello"的空间上修改的,而是重新开辟空间保存"World",然后把新空间的地址赋予a
1.2 字符串常量池
// 创建引用a,在常量池中增加"Hello"字串,把"Hello"字串的地址赋给a
String a = "Hello";
// 创建引用b,在常量池中寻找"Hello"字串,把"Hello"字串的地址赋给b
String b = "Hello";
// 创建引用c,在常量池中寻找拼接后的"Hello"字串,把"Hello"字串的地址赋给c
String c = "He" + "llo";
// 此时,a、b、c三个对象引用对应的地址都是常量池内"Hello"的地址,所以下面的比较均会返回true
System.out.println(a == b);// true
System.out.println(a == c);// true // 但是下面这种方式不会在常量池中保存
// 创建引用d,在堆中开辟空间存储字串"Hello",把空间地址赋给d
String d = new String("Hello"); // 此时,d对应的地址将是堆内的"Hello"字串地址,而非常量池中"Hello"的地址
System.out.println(a == d);// false
1.3 intern方法
// 执行扩展,但是引用d的地址并未修改,所以此时比较a和d仍为false
d.intern();
System.out.println(a == d);// false // 执行扩展,把新地址赋给d,由于新地址指向的是常量池中已经存在的"Hello"字串,所以此时a和d的引用地址相同
d = d.intern();
System.out.println(a == d);// true
1.4 参数传递
static void testParamTrans() {
String param = "Hello World";
User user = new User(0, "Nodin", 23);
System.out.println("Before-------------");
System.out.printf("param is %s, user.name is %s\n", param, user.getName());
change(param, user);
System.out.println("After------------");
System.out.printf("param is %s, user.name is %s\n", param, user.getName());
}
static void change(String param, User user) {
param = "New World";
user.setName("New Name");
}
param is Hello World, user.name
is Nodin
After-------------
Name
1.5 有关字符串的比较
2、StringBuffer
3、StringBuilder
4、String、StringBuffer和StringBuilder的区别
【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder的更多相关文章
- 【重走Android之路】【Java面向对象基础(三)】面向对象思想
[重走Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinkin ...
- 【重走Android之路】【Java面向对象基础(一)】数据类型与运算符
[重走Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符 1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数 ...
- 【重走Android之路】【番外篇】关于==和equals
[重走Android之路][番外篇]关于==和equals 在实际的编程当中,经常会使用==和equals来判断变量是否相同.但是这两种比较方式也常常让人搞得云里雾里摸不着头脑.下面是我个人做的总 ...
- 【重走Android之路】【路线篇(二)】知识点归纳
[重走Android之路][路线篇(二)]知识点归纳 参考:http://blog.csdn.net/xujing81/article/details/7313507 第一阶段:Java面向对 ...
- 【重走Android之路】【开篇】序
[重走Android之路][开篇] [序] 本人Nodin,偶尔也叫MoNodin,朋友们都喜欢叫我丁,还有个笔名叫陌上幽人,文艺时叫恋风,发奋时叫不肯腐烂的土壤...也许你觉得我 ...
- 【重走Android之路】【番外篇】有关于null的一些知识点
[重走Android之路][番外篇]有关于null的一些知识点 1.首先,到底什么是null? null是Java中的一个关键字,用于表示一个空对象引用,但其本身并不是任何类型也不是属于任何对象. ...
- 【重走Android之路】【路线篇(一)】路线图
总结归纳了J2SE和Android的知识点,自己制订了一套详细的路线图,其中肯定有考虑不全和不合适的地方,欢迎各位大牛批评指正. 详细路线图如下:
- java面向对象基础(二)
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- Java面向对象基础二
1.对象的用法 2.多对象的创建方法 3.匿名对象的创建和用法
随机推荐
- iptables规则表
1.iptables规则表 Filter(针对过滤系统):INPUT.FORWARD.OUTPUT NAT(针对地址转换系统):PREROUTING.POSTROUTING.INPUT.OUTPUT ...
- 团队开发——SCRUM报告(一)
一.成员介绍 队长:胡亚宝 PM:曹美娜 成员:焦燕.袁亚姣.黄亚萍 二.sprint会议 由于之前是一五一小长假,所以距离上次会议中间隔了很长时间,这里在对上次会议做一下简单的汇总 在上次会议上我们 ...
- C#开源系统大汇总(转)
一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种 ...
- Linux 硬盘分区、分区、删除分区、格式化、挂载、卸载
Linux 虽然一直都有在玩,但是对硬盘操作确实不是很熟悉今天有空,就整理了下. 1,创建分区 先查看下是否有磁盘没有分区 fdisk -l 其中第一个框和第二个框,是已经分好区的磁盘,第三个硬盘没有 ...
- 关于java.lang.OutOfMemoryError: Java heap space的错误分析
今天无意间遇到这个错误:java.lang.OutOfMemoryError: Java heap space 问题出现原因:使用a标签实现快速下载[当然已经实现了,但想了想还是要归纳解决这类问题] ...
- pcxFirefox 自定义
便携特性(ini设置) 把与firefox.exe同文件夹的tmemutil-sample.ini 改名为tmemutil.ini,设置如下: Portable=1 #便携式 Portable ...
- netty 粘包问题处理
netty 粘包问题处理 key words: netty 粘包 解包 半包 TCP 一般TCP粘包/拆包解决办法 定长消息,例如每个报文长度固定,不够补空格 使用回车换行符分割,在包尾加上分割符,例 ...
- 【CodeForces】【311E】Biologist
网络流/最大权闭合图 题目:http://codeforces.com/problemset/problem/311/E 嗯这是最大权闭合图中很棒的一道题了- 能够1A真是开心-也是我A掉的第一道E题 ...
- Solr Schema.xml和solrconfig.xml分析(转)
Solr Schema.xml和solrconfig.xml分析 (http://yinwufeng.iteye.com/blog/964040) 一.字段配置(schema) schema.xml位 ...
- WCF服务中,[DataMember]属性标记的属性一定要有set访问器
WCF服务中,如果实体类中,包含有[DataMember]属性标记时,该属性一定要有set访问器.当系统必须调用到[DataMember]标记的属性时,如果该属性没有set访问器,则会出错.