1. 程式人生 > 其它 >從零開始學Java-Day11

從零開始學Java-Day11

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
    }
}