戚权20200928

知识点:

1.字符序列

  • String字符串
  • StringBuffer字符串缓冲区,是线程安全的
  • StringBuilder字符串构造器,非线程安全的
  • CharBuffer字符缓冲区

    都实现了CharSequence接口

2. String

2.1字符串声明

String str = "云创动力";//字面量 比较实用
String str = new String("云创动力");//字符串对像

2.2String类

  • public final class String 是用 final修饰的类,在 Java 中用final修饰的类不能被继承,也就是说String 没有子类。
  • 在 Java 中,关键字final 表示最终的。可以用来修饰类、方法、变量。
    • 被 final 修饰的类,不能被继承
    • 被 final 修饰的方法,不能被重写
    • 被 final 修饰的变量,不能变。如果是基本数据类型不能重新赋值,如果是引用数据类型不能改变引用。
  • 无论哪个版本,value属性都是final的。就说明,字符串一点声明就不可变。所以字符串拥有不可变性。

2.3实例方法

方法名 返回值 描述
charAt(int index) char 返回指定索引处的字符
codePointAt(int index) int 返回指定索引处的字符(Unicode代码点)
compareTo(String anotherString) int 按字典顺序比较两个字符串
compareToIgnoreCase(String str) int 按字典顺序比较两个字符串,忽略大小写
concat(String str) String 将指定的字符串连接到该字符串的末尾
contains(CharSequence s) boolean 当且仅当此字符串包含指定的s值序列时才返回true
endsWith(String suffix) boolean 测试此字符串是否以指定的后缀结尾
startsWith(String prefix) boolean 测试此字符串是否以指定的前缀开头
equals(Object anObject) boolean 比较字符串
equalsIgnoreCase(StringanotherString) boolean 比较字符串,忽略大小写
hashCode() int 返回此字符串的哈希码
indexOf(String str) int 返回指定字符第一次出现的字符串内的索引
indexOf(String str, int fromIndex) int 返回指定子字符串的最后一次出现的字符串中的索引,从 指定索引开始向后搜索
length() int String
replace(char oldChar, char newChar) String 返回从替换所有出现的导致一个字符串 oldChar在此字符串 newChar
split(String regex) String[] 将此字符串分割为给定的 regular expression的匹配.使用特殊字符时需要转义
substring(int beginIndex) String 从指定索引开始(包括)到指定索引结束(不包括)
toLowerCase() String 转换小写
toUpperCase() String 转换大写
trim() String 去掉首尾空格
toString() String 返回字符串

2.4字符串判断相等

  • 字符串是引用数据类型,所以使用equals方法进行比较
  • equals 比较两个字符串是否相等(判断字符串内容)
    • 判断 ' == ' 是否相等,如果相等返回 true
    • 判断是否为 null,如果为 null 返回 false
    • 字符串长度是否一样,不一样就返回false
    • 依次比较每一位字符是否相等
  • 如果是一个字面量和变量equals,一定要这样写.
    • ##### " ".equals(str); // 可以避免 NullPointerException
  • equalsIgnoreCase 忽略大小写进行equals判断

3. Object

3.1Object

  • Object 类是所以有类的父类。在 java 中,所有的类都直接或间接的继承了 java.lang.Object 类。在定义一个类时,如果没有 extends 其他类,那么这个类就是直接继承自 Object 类。
  • 常用的方法:
    • getClass() Class<? > 返回 Class 的对象
    • wait() void 导致当前线程等待
    • wait(long timeout) void 导致当前线程等待
    • notify() void 唤醒线程
    • notifyAll() void 唤醒所有线程
    • finalize() void 当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象
    • clone() Object 创建并返回此对象的副本
    • toString() Sring 返回对象的字符串表示形式
    • equals() boolean 两个对象是否相同
    • hashCode() int 返回对象的哈希码值

3.2重写toString()

@Override 
public String toString() { 
return "Person [name=" + name + ", age=" + age + ", gender=" + gender + ", hobby=" + hobby + "]"; 
}

3.3重写equals()hashCode()

  • 因为 equals 和 hashCode 之间是有关系的,所以一般要同时重写这两个方法。
    • 如果 hashCode 值相等, equals 不一定相等

    • 如果 hashCode 值不相等, equals 一定不相等

    • 如果 equals 为 true , hashCode 一定相等

    • 如果 equals 为 false , hashCode 不一定相等

3.4重写equals

  1. equals() 是判断两个对象是否相等的方法,它有一下规则:
    • 自反性 :对于任何非空的对象 x , x.equals(x) 应该返回 true 。
    • 对称性:对于任何非空引用值 x 和 y , x.equals(y) 应该返回 true 当且仅当 y.equals(x) 返 回 true 。
    • 传递性 :对于任何非空引用值 x , y 和 z ,如果 x.equals(y) 返回 true , y.equals(z) 返 回 true ,然后 x.equals(z) 应该返回 true 。
    • 一致性 :对于任何非空引用值 x 和 y ,多次调用 x.equals(y) 始终返回 true 或始终返回false ,当 equals 比较的对象未被修改时。
    • 对于任何非空的参考值 x , x.equals(null) 应该返回 false 。

3.5instanceof

instanceof 表示一个变量所指向的对象是否是指定类型。 instanceof 在使用时,参与运算的对象和类,必须是继承关系。否则会产生错误。

3.6重写hashCode()

重写 hashCode 要注意,同一个对象多次调用 hashCode() 返回值一定是一致的

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + age; 
    result = prime * result + ((gender == null) ? 0 : gender.hashCode()); 
    result = prime * result + ((hobby == null) ? 0 : hobby.hashCode()); 
    result = prime * result + ((name == null) ? 0 : name.hashCode()); 
    return result; 
}

4.包装类

4.1包装类的使用

public static void main(String[] args) { 
    System.out.println(Integer.MAX_VALUE);//int 的最大值 
    System.out.println(Integer.MIN_VALUE);// int的最小值 
    int a = 100 ,b = 102; System.out.println(Integer.compare(a, b));// -1 
    System.out.println(Integer.max(a, b)); //102 
    System.out.println(Integer.min(a, b)); //100 
    System.out.println(Integer.sum(a, b));//202 
}

4.2基本数据类型转String

  1. 使用 String.valueOf() 方法进行转换
  2. "" + 基本数据类型
    int i = 10; 
    String s = String.valueOf(i); 
    byte b = 11; 
    String s1 = String.valueOf(b); 
    short sh = 12; 
    String s2 = String.valueOf(s); 
    long l = 13L; 
    String s3 = String.valueOf(l); 
    boolean f = false; 
    String s4 = String.valueOf(f); 
    char c = 'a'; 
    String s5 = String.valueOf(c); 
    float f1 = 0.15F; 
    String s6 = String.valueOf(f1); 
    double d = 3.14D; 
    String s7 = String.valueOf(d);

4.3拆箱/装箱

  1. 拆箱是指将包装类型转换成其基本数据类型

    • 拆箱:拆箱操作(包装类转换到基本数据类型)调用的是 包装类对象.xxxxValue()

      • 在 java 中基本数据类型与其包装类是自动进行类型转换的,称为自动拆箱/自动装箱

      • Integer i = 10; //装箱 int a = i; // 拆箱
        
  1. 装箱是指将基本数据类型转换成其包装类

    • 装箱操作(基本数据类型转到包装类)调用的是 包装类.valueOf()
      • 对于Float和Double类型会进行 NaN(not a number) 判断,如果是 NaN 就会准换成一个相对应的NaN 引用
      • 如果包装类的值是整数类型范围在 -128 ~ 127 或者布尔类型的 true 或者 false 以及字符文字在\u0000 和 \u007f 范围中的话, java 会直接从缓存中取值。如果超出了这个范围会 new

总结

今天主要学习了String,收获颇多,难度也很大,尤其是String在JVM内的结存解析,晚上研究了一晚上,感觉还是有一点点没有整明白。然后就是感觉Java的很多东西不像前端只管记忆就是了,java很多需要理解,知道如何这样的。感觉整懂了还是很开心的。

评论