1.toString 语句
java.lang.Object 类层次结构的根类 所有的类都直接或者间接的继承自Object类
String toString() 返回对象的字符串表现形式 对象类型 + @ + 地址值(哈希值) 子类一般都会重写这个toString方法 返回对象的属性值 而不是地址值
public static voin main(String args){ Person p = new Person(); String s = Per(); Sy(p); Sy(s) }
在输出语句中打印对象,就是相当于在调用语句toString语句
2.equals方法的理解及使用
boolean equals(Object obj) 比较两个对象是否相同 在Object类中比较的是两个对象的地址值 子类可以重写此方法 比较两个对象的属性值
== 方法比较 如果比较基本类型比较的是具体的数值 如果比较引用类型 比较的是引用类型的地址值
public static void main(String[] args) {
public static void main(String[] args) { Person p = new Person("柳岩",38); Person p2 = new Person("柳岩",38); // p2= null; //== 比较引用数据类型 永远比较的都是地址值 Sy(p == p2);//false Sy(p2));//true }
2.1 hashcode
Object int hashCode() 返回对象的哈希值(对象一旦创建 产生的一个值 相当于是地址值) 如果不重写hashCode方法 比较两个对象的hashCode就是在比较两个对象的地址值 如果重写了hashCode方法 那么比较两个对象的hashCode是在比较什么 就确定不下来了
我们一般情况 重写hashCode 都是按照属性值来进行重写,那么这样比较两个对象的hashCode就是 比较两个对象的属性值 因为有特殊情况 所以 一般的比较 都是先比较 hashCode 在去比较equal, 这样 可以提高比较的效率
先比较hashCode 不同 相同 继续比较equals 不同 相同
public static void main(String[] args) { Object obj = new Object(); Object obj2 = new Object(); Sy()); Sy()); //不重写此方法 比较两个对象的哈希值 就是在比较两个对象的地址值 Sy() == obj2.hashCode());//false Sy()); Person p1 = new Person("柳岩",38); Person p2 = new Person("柳岩",38); //重写了方法 比较两个对象的哈希值 是比较内容 Sy() == ());//true /* String类重写了hashCode方法 我们来看看String 如何重写的 比较两个字符串的 hashCode 是在比较什么东西 */ String s = "abc"; String s2 = "bcd"; Sy()); Sy()); //特殊情况 两个字符串不同 但是计算出来的 哈希值相同 Sy("重地".hashCode()); Sy("通话".hashCode()); }
3.String类的常见方法
特点 1.所有字符串的字面值都是字符串的对象 "abc" 2.字符串是常量 一旦创建 不可改变 3.因为不可改变 所以可以共享
构造方法 public String() public String(String str)
将字符数组转换为字符串 public String(char[] chs) public String(char[] chs,int start,int length) 将字符串数组的一部分转换为字符串 将字节数组转换为字符串 public String(byte[] bytes) public String(byte[] bytes,int start,int length) 将字节数组的一部分转换为字符串 将字符串转换为字符数组 char[] toCharArray() 将字符串转换为字节数组 byte[] getBytes() 替换及其重载的方法 String replace(char oldValue,char newValue) String replace(String old,String new); String replaceAll(String regex, String replacement) 字符串拼接 String concat(String str) 根据传入的字符 找到在字符串中第一次出现的索引 如果在字符串中不存在 返回-1 int indexOf(int c) 从指定索引开始查找指定的字符 int indexOf(int c,int fromIndex) 找到指定字符在字符串中 最后一次出现的索引 int lastIndexOf(int c) 字符串的截取 String substring(int start) 从开始索引 截取到末尾 String substring(int start,int end) 从开始索引 截取到 end-1 大小写转换 String toUpperCase() 转大写 String toLowerCase() 转小写 判断开头和结尾 boolean startsWith(String s) 判断是否以s开头 boolean endsWith(String s) 判断是否以s结尾 去掉字符串两端的空格 String trim() 将字符串进行切割 返回一个字符串数组 String[] split(String regex); public static void main(String[] args) { String str = "aa.....bb...cc..dd";
String[] arr = ("\\.+");
for (int i = 0; i < arr.length; i++) { Sy(arr[i]); } String[] names = {"柳岩","唐嫣","金莲"}; String[] nameArr = "柳岩-唐嫣-金莲".split("-"); }