• 关于字符串


      Java没有内置的字符串类型,而是在标准的Java类库中提供了一个预定义类,叫做String。它允许使用+号对字符串进行拼接,当将一个字符串与一个非字符串进行拼接时,后者会被转换成字符串。对于修改字符串String类并没有提供用于修改字符串的方法,并不能对实际字符串进行修改,字符串被声明为常量对象,以final修饰。而将字符串内容改变,如拼接操作只是改变了改对象的引用地址,而原来的字符串依然存在于内存中,并没有被修改。这样会使通过拼接创建新串的效率变低,但是却使字符串实现了共享。

      对于字符串的判等,如果两个串都是通过直接付值的方式进行声明的,那么可以用==进行判等,但是如果一个为直接赋值,另一个采用构造器,或全部采用构造器,就要用equals进行判等,这是因为采用直接赋值,会使字符串直接从常量池中寻找,找不到存入常量池中。而采用构造器,会使字符串存入堆中,不管堆中有没有,然后去常量池找,找不到就存入,然后堆中存在常量池中地址。而equals方法:

     1 public boolean equals(Object anObject) {
     2         if (this == anObject) {
     3             return true;
     4         }
     5         if (anObject instanceof String) {
     6             String anotherString = (String)anObject;
     7             int n = value.length;
     8             if (n == anotherString.value.length) {
     9                 char v1[] = value;
    10                 char v2[] = anotherString.value;
    11                 int i = 0;
    12                 while (n-- != 0) {
    13                     if (v1[i] != v2[i])
    14                         return false;
    15                     i++;
    16                 }
    17                 return true;
    18             }
    19         }
    20         return false;
    21     }

    先判断是不是同一引用地址,如果不是就判断类型是不是String,再判断串中每一个字符是不是相同,需要注意的是当字符串为null时不能使用equals,这是因为null表示空对象,没有该方法。

    当需要频繁短串结合成长字符串时,拼接操作就会又费时又费力,所以就引入了类StringBuffer和StringBuilder。和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的,但是StringBuilder处理速度要更快,所以大多建议使用StringBuilder,但涉及安全时要采用StringBuffer。

    一些常用方法: append(String s)//将指定的字符串追加到此字符序列。

            reverse()//将此字符序列用其反转形式取代。

            delete(int start, int end)//移除此序列的子字符串中的字符。

            insert(int offset, int i)//将 int 参数的字符串表示形式插入此序列中。

            replace(int start, int end, String str)//使用给定 String 中的字符替换此序列的子字符串中的字符。

    人生如水,不争高山,自然愈下,三年又三年。——struggle!
  • 相关阅读:
    正则表达式中匹配中文
    计算机中的颜色——颜色概述
    人物系列Claude Shannon
    reading listfrom other blog
    how to write Makefile
    《麻省理工大学开放课程:线性代数》[中英双语字幕]视频下载
    正则表达式30分钟入门教程
    usage of fscanf and other read functions in C/C++
    《麻省理工大学开放课程:线性代数》学习
    Open review of papers
  • 原文地址:https://www.cnblogs.com/PersistWp/p/7355112.html
Copyright © 2020-2023  润新知