• 比较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 }
  • 相关阅读:
    简单实现vue列表点击某个高亮显示
    vue中子组件直接修改父组件prop属性bug
    Java基础——关于接口和抽象类的几道练习题
    Eclipse中导入外部jar包步骤
    Java基础——关于jar包的知识
    Java基础——关于访问权限的一道例题
    Java基础——抽象类和接口
    Java基础——多态
    Java基础——继承
    三个案例,解读静态代码块和构造代码块
  • 原文地址:https://www.cnblogs.com/x_wukong/p/3970525.html
Copyright © 2020-2023  润新知