(六)常用类之Object类 与 String类

Object类

  1. public int hashCode() : 返回该对象的哈希码值

    注意: 哈希值是根据哈希算法计算出来的一个值,这个值和地址有关,但不是地址。可以暂时理解为地址

  2. public getClass() 返回对应的类的名字 同一个类是同一个

  3. public String toString() : 返回该对象的字符串表示 (最好子类重写)

    通常默认情况下,返回的字符串,由类名(对象是该类的一个实例),at标记符“@”,和对此对象的哈希码的无符号十六进制表示组成。即它的值等于:

    getClass().getName() + “@” + Integer.toHexString(hashCode())

    Integer.toHexString(int i) 把一个整数转成一个十六进制表示的字符串

    • 建议所有子类重写该方法
  4. public boolean equals(Object obj) : 默认情况下指示两个对象是否指向是同一个对象(在同一个地址) 注意:有些子类会重写,可以比较值是否相同

    == 基本类型:比较值是否相等; 引用类型:比较地址值是否相等

    euals() : 只能比较引用类型

    源码

    public boolean equals(Object obj) {
        return (this == obj);
    }
    

    比较地址一般意义不大,所以经常需要重写

    • 经常重写为比较成员变量值。

    • 重写方法内部,注意成员变量值的引用,如果参数是Object,需要先向下转型

    • 优化: 先判断对象是否是同一个 if ( this == obj ) { return true; }

    • 优化: 先判断是否是对应的类 if ( !(obj instanceof *** ) ) { return false; }

      或者 getClass()方法判断 if ( this.getClass() != obj.getClass() ) { return false; }

    注意:String类的值比较不能用==来比较,而是equals()方法。已经被重写比较字符串值是否相同。


String类

特点:

  1. 字符值是一个实例,一个常量,一旦被创建就不能改变。拼接或者其他操作只是创建新对象,然后改变引用变量引用的位置。(不改变只是指对象实例不变,引用变量可变)
  2. 字符串直接赋值的方式是先到字符串常量池里面去找。如果有就直接返回,如果没有,就创建在常量池中再返回。
  3. 比较时需要用equals()方法(已经被重写)
  4. 判断功能,获取功能,转换功能,替换、比较、去除功能。

构造方法:

  1. public String()

  2. public String(byte[ ] bytes)

  3. public String(byte[ ] bytes, int index, int length)

  4. public String(char[ ] chars)

  5. public String(char[ ] chars, int index, int length)

  6. public String(original String)

    • String 构造时,构造方法与直接字面量赋值的区别:

      String s1 = new String("Hello"); 
      // s1指向堆内存的构造器地址,堆中构造器再指向字符串常量池地址(两个指针)
      
      String s2 = "Hello";
      // s2直接指向字符串常量池的地址
      
      String s3 = "Hello";
      System.out.println(s3 == s1);  //false
      System.out.println(s3 == s2);  //true
      // s3 竟然直接指向s2指向的同一对象
      
      String s4 = "world";
      String s4 = "Helloworld";
      s3 == s1 + s2;  //false
      s3 == "Hello" + "world";  //true
      
      • String引用变量来进行拼接+:先在字符串常量池创建空间,再拼接出新对象
      • String字面常量来进行拼接+:先常量拼接起来,看看有没有这样的常量,如果有直接返回,否则就创建

常用方法:

一. String判断功能

  1. boolean equals(Object obj) 已经重写,可以比较字符串内容是否相同(区分大小写)
  2. boolean equalsIgnoreCase(String str) 比较字符串的内容是否相同,忽略大小写
  3. boolean contains(String str) 判断大字符串中包含小字符串
  4. boolean startsWith(String str) 判断字符串是否以某个指定的字符串结尾
  5. boolean isEmpty() 判断字符串是否为空字符串(对象存在,只是值为空)

二. String获取功能

  1. int length() 获取长度(字符个数)
  2. char charAt(int index) 获取指定位置的字符 //类似python索引
  3. int indexOf(int ch) 返回指定字符在字符串中第一次出现的索引
  4. int indexOf(String str) 返回指定字符第一次出现的索引
  5. int indexOf(int ch,int fromIndex)
  6. int indexOf(String str, int fromIndex)
  7. int lastIndexOf(String str) 返回最后一次出现的索引
  8. String substring(int start) 从指定位置开始截取字符串,默认到末尾 //类似python切片
  9. String substring(int start,int end) 注意endIndex,不包含下边界end(包start不包end
  • 3,4,5,6 若找不到index,返回-1,不报错

三. String转换功能

  1. byte[ ] getBytes() : 把字符串转换成字节数组

  2. char[ ] toCharArray() : 把字符串转换成字符数组 (可以用来遍历字符串)

  3. static String valueOf(char[ ] chs) : 把字符数组转成字符串

  4. static String valueOf(int i) : 把int类型转换为字符串

    注意:static String valueOf() 可以把任意类型的数据转换成字符串

  5. String toLowerCase() : 返回转成小写的字符串 (产生新串,原字符串不变)

  6. String toUpperCase():返回转成大写的字符串

四. 其他功能

1. 替换:把原字符串中的old全部转换为new,返回新的字符串

  • String replace(char old, char new)
  • String replace(String old, String new)

2. 去除字符串两端空格、回车、换行

  • String trim()

3. 分割功能:

public String[ ] split(String str) :将此字符串按照给定的str分割成字符串数组

3. 按字典顺序比较两个字符串

  • int compareTo(String str)
  • int compareToIgnoreCasse(String str)
    // 字符串自动转换成一个字符数组
    // private final char value[]
public int compareTo(String anotherString) {
        int len1 = value.length;
        int len2 = anotherString.value.length;
        int lim = Math.min(len1, len2);
        char v1[] = value;
        char v2[] = anotherString.value;

        int k = 0;
        while (k < lim) {
            char c1 = v1[k];
            char c2 = v2[k];
            if (c1 != c2) {
                return c1 - c2;   //若某个值不同,返回差值
            }
            k++;
        }
        return len1 - len2;  // 若到末尾均相同,返回长度的差
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容