一起Talk Android吧(第十八回:Java常用类String VS StringBuffer)
来源:互联网 发布:java邮箱格式验证方法 编辑:程序博客网 时间:2024/06/05 10:08
各位看官们,大家好,上一回中咱们说的是Java常用类之StringBuffer的例子,这一回咱们说的例子是Java常用类String VS StringBuffer
。闲话休提, 言归正转。让我们一起Talk Android吧!
看官们,我们在前面章回中介绍了String和StringBuffer
两种字符串类型,这一回中我们将对它们进行对比,同时解答上一个章回中留下的疑惑。首先我们将这两种字符串类型进行对比:
String类型的变量是字符串常量,而StringBuffer类型的变量是字符串变量
大家都知道常量不可以修改,而变量是可以修改的。这表明我们可以修改StringBuffer
类型的字符串变量,而不能修改String类型的字符串常量。回想一下,前面章回中String类型的变量有两种初始化方式,而StringBuffer类型的变量只有一种初始化方式,大家现在明白其中的原因了吗?其本质原因在于:不能使用字符串常量初始化字符串变量。这一点从这两种类型提供的方法中也能体现出来。比如String类型就没有提供与append()和insert()
类似可以直接修改字符串的方法,而StringBuffer提供这种方法。大家还记得上一章回中最后一个疑问吗?我们使用append()
方法在原来的字符串后面添加了新的字符串,被添加的新字符串已经成了原来字符串的一部分。接下来通过具体的例子进行说明:
public class StringEx { public static void main(String args[]) { String str1 = "Java"; StringBuffer str2 = new StringBuffer("Java"); System.out.println("Before change the string: "); System.out.println("str1 is: "+str1); System.out.println("str2 is: "+str2); if(str1 == "Java") System.out.println("str1 has the same address of memory "); else System.out.println("str1 has not the same address of memory "); if(str2 == str2) System.out.println("str2 has the same address of memory "); else System.out.println("str2 has not the same address of memory "); str1 = str1+" Language"; str2 = str2.append(" Language"); System.out.println("After change the string: "); System.out.println("str1 is: "+str1); System.out.println("str2 is: "+str2); if(str1 == "Java") System.out.println("str1 has the same address of memory "); else System.out.println("str1 has not the same address of memory "); if(str2 == str2) System.out.println("str2 has the same address of memory "); else System.out.println("str2 has not the same address of memory "); }}
在上面的代码中我们定义了两个字符串:str1和str2
,不过它们的类型不相同。我们对字符串进行了相关的修改,并且判断了修改前后它们的内存地址是否相同。下面是程序的运行结果,请大家参考:
Before change the string: str1 is: Javastr2 is: Javastr1 has the same address of memory str2 has the same address of memory After change the string: str1 is: Java Languagestr2 is: Java Languagestr1 has not the same address of memory str2 has the same address of memory
从程序运行结果中可以看到,这两个变量的内容在修改前后都拥有相同的内容,但是String类型的变量:str1在修改前后拥有不同的内存地址;而stringBuffer类型的变量在修改前后拥有相同的内存地址。
不知道大家还记得我们在前面章回中提到过的匿名对象没有,str1变量在修改前指向匿名对象"Java"
,修改后指向了匿名对象“Java Language”
,两个不同的匿名对象,其内存地址显然不相同,大家现在明白其中的原因了吧。
关于这两种类型的字符串,在实际使用中大家可以依据程序的需要来选择其中一种,不过有一点大家需要明白: 在字符串连接时String比StingBuffer类型的字符串性能低,因为在内存中创建了新的匿名对象,既有时间上的开销,也有空间上的开销。
各位看官,关于Java常用类String VS StringBuffer
的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!
- 一起Talk Android吧(第十八回:Java常用类String VS StringBuffer)
- 一起Talk Android吧(第十七回:Java常用类之StringBuffer)
- 一起Talk Android吧(第十六回:Java常用类之String)
- 一起Talk Android吧(第十五回:Java常用类之Arrays)
- 一起Talk Android吧(第十九回:Java常用类之Date)
- 一起Talk Android吧(第二十回:Java常用类之Date续)
- 一起Talk Android吧(第二十一回:Java常用类之文件操作一)
- 一起Talk Android吧(第二十二回:Java常用类之文件操作二)
- 一起Talk Android吧(第五回:Java中的程序结构)
- 一起Talk Android吧(第六回:Java中的函数)
- 一起Talk Android吧(第十四回:Java中的异常)
- 一起Talk Android吧(第二十七回:Java泛型)
- 一起talk Vim吧(第十八回:Vim插件之cscope续)
- 一起talk C栗子吧(第十八回:C语言实例--输出十六进制)
- 一起Talk Android吧(第二十六回:Java包装类)
- 一起Talk Android吧(第十一回:Java中的继承)
- 一起Talk Android吧(第四十三回:Android中的Fragment八-静态加载VS动态加载)
- 一起Talk Android吧(第三回:Java中的变量类型)
- Android System Server进程源码分析 上
- 机器视觉
- 从零写一个线程切换工具
- Non-overlapping Intervals
- springBoot上传文件大小设置
- 一起Talk Android吧(第十八回:Java常用类String VS StringBuffer)
- 个人博客页面
- HashMap底层源码分析
- 前端学HTTP之安全HTTP
- 《Rich feature hierarchies for accurate object detection and semantic segmentation》笔记
- 构造函数的初始化列表
- 【物理/数学】—— 概念的理解 moment、momentum
- Attention注意力机制--原理与应用
- 前端学HTTP之摘要认证