Java默认继承Object类,Java类都继承了Object类的属性和方法 toString() equals() hashCode()
默认返回值为String类型:类名全程@+hashCode()(hashCode值的十六进制的值)
在Object类中都是比较引用地址是否相等 比较两个对象是否相等:"引用相等" "对象相等"
- 引用相等:比的是对象的地址,比的是是否为同一个对象
- 对象相等:比的是对象的数据,对象的内容 equals()在Object中默认比较的是引用相等 建议覆盖:实现对象内容(对象数据)的比较
- 覆盖规则
- 自反性:自己和自己比返回的结果为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
原则上不同的对象hashCode值不同
- hashCode()要和equals()方法一同覆盖
- 当两个对象equals()比较为true,应该具有相同的hashCode值
- 当两个对象equals()比较为false,应该具有不同的hashCode值
- hashCode值要稳定,一个对象创建以后,就不应该再发生变化
- 默认的hashCode()方法(Object中的)是当前堆对象地址转换的一个整数,这个整数不是一个内存地址
- 一般使用对象的OID值作为对象的hashCode值。OID是对象的唯一编号,在项目中,一般根据数据生成一个OID值,就是数据库的主键(唯一约束性)
相当于char[] + 操作(方法) char[]本身就是一串字符,Java中可以作为字符串。char类型的数组,直接打印的话结果为字符串,而不是一个地址
- char[]只有数组,没有操作(方法)
- 一串字符就是字符串:String、char[]、StringBuilder...等都可以描述一串字符
- 字符串的字面量都是String类型
- 字符串的常量:static final
- String的内部就是char[] String有一个原则,对象内容不变,String对象永远不变,这样的规定使字符串使用起来跟基本类型一样 String字面量相同的时候,会替换为同一个String对象的引用,常量池会优化为同一个字符串 String的比较通常使用equals()
- String类中常用的方法 原则:字符串里的方法使字符串有了变换,就要返回一个新的String对象,如果没有产生变化,就返回原字符串。
| 方法 | 描述 |
|---|---|
| charAt() | 获取指定下标的字符 |
| indexOf() | 获取指定字符的下标 |
| lastIndexOf() | 查看给定字符串在当前字符串中最后一次出现的位置 |
| toUpperCase() | 将当前字符串中所有小写字母转换为大写 |
| toLowerCase() | 将当前字符串中所有的大写字母转换为小写 |
| trim() | 去除当前字符串中两边的空格 |
| startsWith() | 判断当前字符串是否以给定的字符串起始 |
| endsWith() | 判断当前字符串是否以给定的字符串结尾 |
| length() | 获取当前字符串的长度 |
| equals() | 比较两个字符串的内容是否相等 |
| equalsIgnoreCase() | 忽略英文大小写,比较字符串是否相等 |
| subString() | 截取当前字符串,从给定位置开始到给定位置 (半开半闭) |
| toCharArray() | 将给定的字符串转换为字符数组 |
| getBytest() | 根据给定的字符集将当前字符串转化为对应的字节序列 |
-
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类
负责字符串的匹配处理(验证字符串的格式)
^正则表达式$
-
正则表达式中用到的字符集
正则表达式 描述 [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}$"
-
预定义字符集
预定义字符集 描述 \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}$"