從零開始學Java-Day11
阿新 • • 發佈:2021-06-15
API
Objex(頂級父類):
在不明確給出超類的情況下,Java會自動把Object作為要定義類的超類
package cn.tedu.api; import java.util.Objects; //本類用於測試頂級父類Object public class TestObject { public static void main(String[] args) { Student student = new Student("大和赤驥", 3); Student student2 = new Student("大和赤驥", 3); System.out.println(student); System.out.println(student2); System.out.println(student.hashCode()); System.out.println(student2.hashCode()); /* *equals()預設實現是==,比較2給物件的地址值 */ System.out.println(student.equals(student2)); } } class Student { String name; int age; public Student() { } public Student(String name, int age) { this.name = name; this.age = age; } @Override public String toString(){ return "Student{" + "name:" + name + "," + "age:" + age + "}"; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(name, student.name); } @Override public int hashCode() { return Objects.hash(name, age); } }
toString()
- 預設實現列印物件的地址值
- 重寫後:列印的是物件的屬性和屬性值
hashCode():物件的雜湊碼值,一串數字,用來區分不同的物件
equals():
- equals()預設實現的是==,比較的是地址值
- 重寫後比較的是屬性值
String 字串,使用""來包裹
String底層維護了一個char[]
String 建立的兩種方式
方式一:char[] value = {'a', 'b', 'c'}; String s = new String(value);--沒有高效的效果
方式二:String s = "abc";有高效的效果,存在堆的常量池
package cn.tedu.api; import javax.jws.soap.SOAPBinding; //本類用於測試String類的用法 public class TestString { public static void main(String[] args) { String s = "abc"; /*字串底層維護著是一個char[],物件存在堆中*/ char[] value = {'a', 'b', 'c'}; String s1 = new String(value); String s2 = new String(value); System.out.println(s1 == s2);//false /*String底層也重寫了equals,比較的是兩給串的實際引數而不是地址值*/ System.out.println(s1.equals(s2));//true System.out.println("================"); /*此種建立方式有一個高效的效果,底層也會new String()存放在堆中的常量池中 * 第二次建立時會檢視之前是否建立如果有,就不再建立,效率高,只有這種建立方式才有 * 高效的效果*/ String str = "abc"; String str1 = "abc"; System.out.println(str == str1);//true System.out.println(str.equals(str1));//true } }
package cn.tedu.api; import java.util.Arrays; //本類用於測試String常用方法 public class TestString2 { public static void main(String[] args) { String s = "abc"; char[] value = {'a', 'b', 'c'}; String s1 = new String(value); System.out.println(s.charAt(0));//列印下標為0的元素 System.out.println(s.concat("111"));//將"111"連結到字串末尾 System.out.println(s.startsWith("a"));//判斷是否以a開頭 System.out.println(s.endsWith("a"));//判斷是否以a結尾 System.out.println(s == s1);//判斷2給字串地址是否相同 System.out.println(s.equals(s1));//判斷2給字串的值是否相同 System.out.println(s.length());//列印字串的長度 System.out.println(s.indexOf('a'));//列印字串中a的下標 System.out.println(s.indexOf("a")); System.out.println(s.lastIndexOf('c'));//列印字串反轉中c的下標 System.out.println(s.lastIndexOf("c")); System.out.println(s.toLowerCase());//使字串中的字母全都小寫 System.out.println(s.toUpperCase());//使字串中的字母全都大寫 System.out.println(s.getBytes());//將字串轉成位元組陣列 System.out.println(Arrays.toString(s.getBytes())); String s2 = "a b%c d e"; System.out.println(s2.split("%"));//以%為標記分割字串 System.out.println(Arrays.toString(s2.split("%"))); s2 = " abcde "; System.out.println(s2.trim());//去除字串首尾的空格 System.out.println(s.substring(0,2));//擷取0~2位置的字串左閉右開 System.out.println(String.valueOf(54) + 54);//將整形54轉化為字串的54 } }