一.String和StringBuffer的区别是在那里?
String;[/b]
① String是不变字符串 ,为不可变对象,一旦被创建,就不能修改它的值,对于已 经存在的
② String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
String 是final类,即不能被继承.
③ 使用String进行字符串的连接,每次对String进行赋值操作时都将生成一个新的String实例,会占用较多内存;因此在需要动态改变字符串时,用StingBuffer效率比较高.
④ String的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后
再将StringBuffer toSting();这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣. 并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
StringBuffer:
① StringBuffer: 是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象,它只能通过构造函数来建立,如StringBuffer sb = new StringBuffer();
② StringBuffer的值不能通过赋值符号对他进行赋值.如sb = "welcome to here!"
③StringBuffer的对象被建立以后,在内存中就会分配内存空间,并初始保存 一个null.向StringBuffer 中赋值的时候可以通过它的append方法. 如 sb.append("hello");
④字符串连接操作中StringBuffer的效率要比String高,的处理步骤实际上是通过建立一StringBuffer,然后调用append(),最后再将StringBuffer toSting(); 这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣. 并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值.这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的.
二.比较两个字符串是否相等,如果相等,比较的是什么?如果不相等那么比较又是什么?
两字符串是否相等比较的是地址内的内容,比较的是对象,所以当比较两字符串是否相等时就用到equals(),而不用==,这就是他们的区别所在。
我们下面来区别一下equals()和==,在比较字符型数据时,==比较的是内存中的地址,比较的是对象的句柄;而equals()比较的是地址内的内容,比较的是对象。由于JAVA中除基本数据类型外其它一切都是对象,而对象变量存储的都是引用,相当于C中的指针,所以在比较对象时如String,用==是比较两个变量是否指向同一个对象,而用equals才是比较两个String的内容是否相等。
==绝对比equals快。 ==是java内置的,可以理解为"相同"。对于简单类型来说,a=3,b=3,我们可以说a和b相同,也可以说a和b相等,都没什么问题。.equals()是Object的方法,可以理解为"相等"。显然两个object相等并不意味着相同;但是需要注意的是,也并不意味着他们对应内存区域的所有字节都相等,比如(但不限于这个原因)他们内部可能还有自己的引用。所以,两个对象是否相等,只有这个对象自己才知道如何判断,java并不知道。所以就需要类自己提供一个equals方法。
分享到:
相关推荐
根据给定的信息,我们可以归纳和总结出以下关于 C 语言及 C++ 中字符串处理的关键知识点: ### 一、字符串处理概述 在 C 语言及 C++ 中,字符串是一系列字符的序列,通常以空字符(`\0`)作为结束标志。处理字符串...
根据提供的文件信息,我们可以归纳总结出一系列关于SQL字符串处理函数的知识点。这些函数在数据库管理和数据操作中扮演着重要的角色,能够帮助用户高效地完成字符串的处理任务。 ### ASCII() ASCII()函数用于获取...
根据提供的文件信息,我们可以归纳出一系列关于C#中字符串处理的重要知识点。这些知识点不仅涵盖了基本的字符串操作,还包括了格式转换、日期时间处理以及其他高级功能。以下是对这些知识点的详细阐述: ### C#字符...
18. **explode($delimiter, $string, $limit)**: 使用$delimiter将字符串$string切割成数组。$limit参数可以限制返回数组的大小。 19. **str_pad($input, $pad_length, $pad_string, $pad_type)**: 通过在字符串的...
通过这个实验,学生不仅可以掌握C++的基本输入输出操作,还能了解到如何使用`std::string`类处理字符串,以及如何通过用户交互和条件判断实现更复杂的字符串操作。这些技能对于进行更复杂的软件开发至关重要。
根据提供的文档信息,我们可以归纳出该资料集主要围绕“字符数组与字符串”的概念和技术进行讲解。考虑到这些资料可能被用于信息学奥林匹克竞赛的准备,因此接下来将深入探讨以下几个关键知识点: ### 一、字符数组...
`char`数组是早期的字符串表示方式,而`string`类提供了更现代、更安全的字符串操作方法。两者之间可以互相转换,但`string`类提供了更多面向对象的方法,如大小写转换、子串提取等。 总的来说,理解并熟练掌握字符...
根据提供的文件信息,我们可以归纳总结出C语言中与字符串处理相关的几个重要函数及其使用方法。以下将对这些函数进行详细解读: ### 1. `stpcpy` **功能描述:** `stpcpy` 函数用于拷贝一个字符串到另一个字符串,...
本示例通过Java实现了字符串的加密与解密功能,采用DES加密算法,提供了基本的加密解密功能及字符串与十六进制之间的转换。这种实现方式适用于简单的加密需求,但对于更复杂的安全场景,建议考虑使用更先进的加密...
以上介绍了几种常用的JavaScript字符串处理方法:`split()` 用于分割字符串,`substring()` 和 `slice()` 用于截取字符串,`join()` 用于连接数组元素成字符串,`indexOf()` 用于查找子字符串的位置,以及 `...
根据提供的文件信息,...以上函数为常见的字符串处理函数,能够帮助用户高效地对字符串进行操作,例如去除特定位置的字符或清洗字符串中的空白字符等。这些函数在实际开发中非常实用,可以提高代码的可读性和维护性。
- 定义变量 `stringToFind` 存储待查找的字符串(例如 "@yahoo")。 - 使用 `Cells.Find` 方法查找首个包含指定字符串的单元格。 - 如果未找到,则提示消息“未找到搜索值”。 - 如果找到,则将找到的单元格内容...
根据提供的文件信息,我们可以归纳并深入探讨以下几个与C语言字符串处理相关的知识点: ### 1. 声明字符串变量 字符串变量在C语言中通常通过`char`数组的形式来实现,而不是像C#等现代编程语言那样直接使用`string...
C++标准库中的string类提供了丰富的功能,以支持字符串的操作和处理。以下是从给定文件内容中归纳出的相关知识点: 1. 字符串定义和初始化 在C++中,可以使用多种方法来定义和初始化string对象: - 默认构造函数...
C++标准库中的String类(注意,C++标准库中并没有名为String的类,通常使用std::string,为了与文章内容保持一致,以下简称String)并没有提供直接分割字符串的方法,因此,开发者需要自己实现字符串的分割功能。...
String的常用方法归纳与总结 char charAt(int index) 返回指定索引处的 char 值。 int compareTo(Object o) 把这个字符串和另一个对象比较。 int compareTo(String anotherString) 按字典顺序比较两个字符串。 int ...
#### 3.1.3 字符串长度(Length of String) - **定义**: 字符串长度是指构成该字符串的符号的数量。 - **示例**: - 对于字符串w1 = abc和w2 = abab,它们的长度分别是|w1| = 3和|w2| = 4。 - 如果字符串w = v1...
### Java SE 基础常用类使用归纳总结 在Java编程语言中,了解并熟练掌握常用的类是非常重要的,这些类提供了丰富的功能,可以帮助开发者高效地完成各种任务。本篇文章将针对给定文件中的内容,详细解释Java SE基础...