比较StringBuffer字符串内容是否相等?

为什么会有这个问题呢?首先得看看String和StringBuffer的比较区别:

==只能比较两个字符串的内存地址是否一样,不能比较字符串内容;

String的equals方法因为重写了Object的equals方法,所以可以比较字符串的内容,而StringBuffer因为没重写equals方法,直接继承了Object的equals方法,所以不行。

顺便提一句:String因为是final类型的,是不可变类,所以对于append等操作,是要重新new String的,而StringBuffer是可变类,不需要重新new StringBuffer,所以在字符串操作上性能非常好,而且好的不是一点点。可试试:

 1 public static void main(String[] args) {
 2         StringBuffer s1 = new StringBuffer();
 3         String s2 = new String();
 4         
 5         Date d = new Date();
 6         long a = d.getTime();
 7         for (int i = 0; i < 100000; i++) {
 8             s1.append(i);
 9         }
10         Date d2 = new Date();
11         long b = d2.getTime();
12         System.out.println(b-a);
13         
14         Date d3 = new Date();
15         a = d3.getTime();
16         for (int i = 0; i < 100000; i++) {
17             s2 = s2 + i;
18         }
19         Date d4 = new Date();
20         b = d4.getTime();
21         System.out.println(b-a);
22     }

 

 

 

那么如何比较StringBuffer字符串内容是否相等呢?

可以使用toString() 方法将StringBuffer的内容转换为String 字符串,再使用equals()方法比较。

 1 public class Main {
 2     public static void main(String[] args) {
 3         StringBuffer strb1 = new StringBuffer("Java");// 创建StringBuffer对象str1
 4         StringBuffer strb2 = new StringBuffer("Java");// 创建StringBuffer对象str2
 5         System.out.println("****不使用toString()方法****");
 6         if (strb1.equals(strb2)) {
 7             System.out.println("相等");
 8         } else {
 9             System.out.println("不相等");
10         }
11         System.out.println("****使用toString()方法****");
12         if (strb1.toString().equals(strb2.toString())) {
13             System.out.println("相等");
14         } else {
15             System.out.println("不相等");
16         }
17     }
18 }

 

转载于:https://www.cnblogs.com/x_wukong/p/3970525.html

1、列举常用的java系统包?哪个包不需要用import导入? 2、如何获取字符串长度、数组长度? 3、如何判断两个字符串是否相等? 4、如何获取字符串指定位置的字符? 5、怎样把字符串转小写或大写? 6、如何去除字符串首尾空格? 7、怎样判断一个字符串是否以另外字符串开头或结束? 8、使用String对象的求子串方法substring()要注意什么?“abcde".substring(0,3)的结果是什么? 9、如何判断一个字符串是另一个的子串? 10、将一个字符串按指定定界符分割成字符串数组用什么方法,举例说明。 11、字符串和字符数组如何相互转换? 12、String和StringBuffer的区别,如何互相转化? 13、如何求字符串的逆序字符串? 14、Integer类中2,8,16进制=》10进制,10进制转2,8,16进制的方法。 15、获取给定日期(比如你的生日)星期几的方法,举例说明。 16、字符串和整数(实数)之间互相转换的方法? 17、如何计算一段代码的执行时间? 18、如何实现两个数组内容的拷贝? 19、已知window下任意文件名,返回该文件的扩展名。 20、以"年-月-日 小时:分钟:秒"的格式显示当前时间,年4位,月、日、小时、分钟、秒占2位,小时是24进制的。 21、任给两个日期,求它们相差的天数?(可考虑用日期时间类实现),给出1990-10-1和2000-3-1相差的天数的结果值。
04-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值