黑马程序员—Java中的字符串浅析
来源:互联网 发布:淘宝退货在线支付运费 编辑:程序博客网 时间:2024/05/22 12:28
---------------------- android培训、java培训、期待与您交流! ---------------------
Java中的String类,即字符串类,它的对象往往与其他对象有很多不同的地方,让人琢磨不透。经过几天的学习,我想总结一下String类的一些特点。
1. 相当于常量:
String字符串是常量,建好之后不可以修改(想要随时修改可以使用StringBuffer类)。
2. 存储位置:
通常定义一个对象是以这样的方式
String str = new String("test");
但是String类还可以直接赋值
String str = “test”;
这两种方式到底有什么区别呢?这就需要弄清楚Java中的字符串是怎么存储的。这个问题要涉及到Java中两个重要的存储区——堆(Heep)和字符串池(String Pool)。堆是用来存储对象的,包括该对象的特有属性(即非静态属性,方法存放在方法区,这里暂时不讨论)。字符串池用来存放当前用到的不重复的字符串,方便使用,以免重复定义相同字符串。
语句String str = new String("test");的过程是这样的,首先看字符串池中有没有“test”字符串,如果没有就在池中加入“test”字符串,之后在堆中建立一个对象(也有一份“test”字符串信息),将对象的地址返回给str变量。
语句String str = “test”;的执行过程是这样的,首先查看字符串池中有没有‘“test”字符串,如果没有就在池中加入“test”字符串,之后将池中“test”字符串的地址返回给str变量。可以看到,这里并没有创建对象。
这样一来,就会有一些重要的特性产生
(1)String str1 = “test”;
String str2 = “test”;
str1与str2的值相等。因为他们的值都是池中“test”的地址(每个字符串在池中只有一份)
(2)String str1 = new String(“test”);
String str2 = new String("test");
str1与str2的值不相等。因为他们的值是两个独立的对象的地址,只不过对象里面保存的字符串相同而已(第一句话执行后,pool中有“test”字符串)。
3. equals方法与“==”
判断两个对象(a和b)是否是同一个对象,可以有两种方法供选择
(1)System.out.println(a.equals(b));
(2) System.out.println(a==b);
equals和“==”又有什么区别呢?
“==”是直接比较两个变量的值(对象的地址)是否相同,如果相同就是同一个对象,返回true,否则返回false。
equals是一个判断对象是否相同的方法,Object类中定义它与“==”的功能一样,地址一致则返回true,否则返回false。但是String类复写(Overide)了这个方法,功能变为,如果两个String对象指定的字符串相同则返回true,不同则返回false,也就是说,他比较的是对应字符串的值是否相同。
故:
String a = new String("abc");
String b = new String("abc");
String c = "abc";
String d = "abc";
a.equals(b)的结果是true
a==b的结果是false
c.equals(d)的结果的true
c==d的结果是true
a.equals(c) 的结果是true
以上三点是我的一点小总结,有不妥的地方欢迎指正,谢谢大家。
----------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima- 黑马程序员—Java中的字符串浅析
- 黑马程序员——JAVA中的字符串
- 黑马程序员:Java中的字符串
- 黑马程序员----关于JAVA中的泛型的浅析
- 黑马程序员--java字符串
- 黑马程序员——Java基础---字符串
- 黑马程序员—8、JAVA基础&字符串
- 黑马程序员_java中的字符串
- (五)黑马程序员——Java中的字符串操作类(String、StringBuilder、StringBuffer)
- 黑马程序员—字符串
- 黑马程序员—字符串
- 黑马程序员-java字符串总结
- 黑马程序员------------------Java基础----------------字符串
- 黑马程序员——java中的流
- 黑马程序员——java中的线程
- 黑马程序员——java中的网络
- 黑马程序员——java中的 GUI
- 黑马程序员——Java中的ShutdownHook
- 设计模式之facade模式
- mysql 启动异常
- SQL小技巧
- 要过年了
- linux telnet配置 .
- 黑马程序员—Java中的字符串浅析
- OllyDBG处理C++ EH exception异常
- Linux内存描述符mm_struct初窥
- 解决方法:某些手机(酷派D530)提示: 空间已满,应用程序未安装
- 云时代面临的难题 如何进行SaaS数据挖掘
- [转载]计算模型
- red hat 连接外网设置 .
- 统计学 学习笔记 (六)—— 掌握数据的整体状态 标准正态分布
- GraphEdit最大化后不能还原的解决办法