Skip to content

Latest commit

 

History

History
executable file
·
224 lines (122 loc) · 7.56 KB

File metadata and controls

executable file
·
224 lines (122 loc) · 7.56 KB

1. Object类

Java默认继承Object类,Java类都继承了Object类的属性和方法 toString() equals() hashCode()

1.1 toString()

默认返回值为String类型:类名全程@+hashCode()(hashCode值的十六进制的值)

1.2 equals() ==

在Object类中都是比较引用地址是否相等 比较两个对象是否相等:"引用相等" "对象相等"

  1. 引用相等:比的是对象的地址,比的是是否为同一个对象
  2. 对象相等:比的是对象的数据,对象的内容 equals()在Object中默认比较的是引用相等 建议覆盖:实现对象内容(对象数据)的比较
  3. 覆盖规则
  • 自反性:自己和自己比返回的结果为true x.equals(x) --> true
  • 对称性:x.equals(y) -- true 那么 y.equals(x) 也要为true
  • 传递性:x.equals(y) --> true, y.equals(z) --> true,那么x.equals(z)也要为true
  • 一致性: x.equals(y) 一开始的结果为true,只要不对x和y作出任何的修改,后期x.equals(y)也为true

1.3 hashCode()

原则上不同的对象hashCode值不同

  1. hashCode()要和equals()方法一同覆盖
  • 当两个对象equals()比较为true,应该具有相同的hashCode值
  • 当两个对象equals()比较为false,应该具有不同的hashCode值
  • hashCode值要稳定,一个对象创建以后,就不应该再发生变化
  1. 默认的hashCode()方法(Object中的)是当前堆对象地址转换的一个整数,这个整数不是一个内存地址
  2. 一般使用对象的OID值作为对象的hashCode值。OID是对象的唯一编号,在项目中,一般根据数据生成一个OID值,就是数据库的主键(唯一约束性)

3. String类

相当于char[] + 操作(方法) char[]本身就是一串字符,Java中可以作为字符串。char类型的数组,直接打印的话结果为字符串,而不是一个地址

  1. char[]只有数组,没有操作(方法)
  2. 一串字符就是字符串:String、char[]、StringBuilder...等都可以描述一串字符
  3. 字符串的字面量都是String类型
  4. 字符串的常量:static final
  5. String的内部就是char[] String有一个原则,对象内容不变,String对象永远不变,这样的规定使字符串使用起来跟基本类型一样 String字面量相同的时候,会替换为同一个String对象的引用,常量池会优化为同一个字符串 String的比较通常使用equals()
  6. String类中常用的方法 原则:字符串里的方法使字符串有了变换,就要返回一个新的String对象,如果没有产生变化,就返回原字符串。

3.1 字符串覆盖了Object类中的equals()、hashCode()、toString()

3.2 String字符串中所有的字符都有下标,从0开始,到length()-1结束

3.3 常用的方法

方法 描述
charAt() 获取指定下标的字符
indexOf() 获取指定字符的下标
lastIndexOf() 查看给定字符串在当前字符串中最后一次出现的位置
toUpperCase() 将当前字符串中所有小写字母转换为大写
toLowerCase() 将当前字符串中所有的大写字母转换为小写
trim() 去除当前字符串中两边的空格
startsWith() 判断当前字符串是否以给定的字符串起始
endsWith() 判断当前字符串是否以给定的字符串结尾
length() 获取当前字符串的长度
equals() 比较两个字符串的内容是否相等
equalsIgnoreCase() 忽略英文大小写,比较字符串是否相等
subString() 截取当前字符串,从给定位置开始到给定位置 (半开半闭)
toCharArray() 将给定的字符串转换为字符数组
getBytest() 根据给定的字符集将当前字符串转化为对应的字节序列

4. StringBuilder类

  • String = char[] + 操作 数组是不变的(一旦改变就不是原来的对象) StringBuilder = char[] + 操作 该数组的内容可变(底层是链表),如果数组的长度不够,会利用变长算法来维护,自动扩容 StringBuilder是用来修改字符串的类,是一个变长字符序列(char类型的数组)

  • StringBuilder和StringBuffer的比较

    StringBuilder StringBuffer
    jdk1.5 jdk1.0

| 效率高 | 效率相对较低 | | 线程不安全 | 线程安全 |

  • StringBuilder中的常用方法 append, insert, delete, replace 返回值是StringBuilder对象本身的引用 如果软件需要大量的字符串处理,一般使用StringBuilder

  • String 和 StringBuilder转换 String -> StringBuilder: new StringBuilder(str); StringBuilder -> String: stringBuilder.toString();

  • StringBuilder比较 该类没有重写equals()方法,所以不能用equals()方法进行字符串的比较 要先转化为String类

3. 正则表达式

负责字符串的匹配处理(验证字符串的格式)

3.1 书写格式

^正则表达式$

  1. 正则表达式中用到的字符集

    正则表达式 描述
    [123456789] 表示这些数字其中之一
    [1-9] 表示1-9的数,同上
    [^12345] 除了12345之外的所有
    [a-z] 匹配小写字母
    [0-9a-zA-Z] 匹配其中之一
    0[xX][0-9a-fA-F] 整数的十六进制形式`
    {6} 出现了六次
    {8, 10} 出现了8-10次,全闭合

    正则表达式也是一个字符串 例如。匹配8-15位的数字字母下划线 String regex = "^[0-9a-zA-Z_]{8,15}$"

  2. 预定义字符集

    预定义字符集 描述
    \d 表示[0-9]
    . 表示任意字符
    \w 表示单词字符即[0-9a-zA-Z_]
    \W 表示非单词字符
    \s 表示匹配空白
    \S 表示非空白
    \D 表示非数字
    {m,n} 表示出现了m-n次
    {n} 表示出现了n次
    ? 表示出现了0-1次
    + 表示出现了1次以上
    * 表示出现了0-n次
    | 表示或者
    & 表示并且

举例

  • 验证邮政编码(6位数字组成) String regex = "^[0-9]{6}$" String regex = "^\d{6}$" 注意""需要转义
  • 用户名验证:8-16位的数字、字母、下划线 "^[0-9a-zA-Z_]{8,16}$", "^\w{8,16}$"
  • 匹配手机号码的格式 "^(\\+86\\s|0086\\s)?[1][358]\\d{7}$"