无声specialweek

从零开始学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
    }
}

posted on 2021-06-15 18:43  无声specialweek  阅读(31)  评论(0编辑  收藏  举报

导航