Day11 API01-1 Object、String、String Builder/String Buffer

1.API

概念

API(Application Programming Interface,应用程序接口)是一些预先定义的函数方法,是一种通用功能集。

java.lang包是java的核心,包含了java基础类,包括基本Object类/Class类/String类/基本数学类等最基本的类,这个包无需导入,默认会自动导入

2.Object

Object类常用方法

Object--顶级父类--java中所有类都把Object作为超类
1)toString()----默认实现打印的是对象的地址值
                         ----自动生成重写后的方法:打印的是对象的类型和属性值
2)hashCode()----对象的哈希码值--一串数字--用于区分不同的对象
3)equals()---------默认的是==比较,比较的是两个对象的地址值
                   ---------自动生成重写后的方法:比较的是两个对象的类型+所有属性值

练习:常用方法的使用

package cn.tedu.api;

import java.util.Objects;

/*测试顶级父类Object*/
public class TestObject {
    public static void main(String[] args) {
        //4.创建对象并给对象属性赋值查看
        Student s=new Student("超超",18);
        Student s2=new Student("超超",18);

        //6.打印测试toString()
        //6.1打印结果1:打印的是地址值
        //System.out.println(s);//cn.tedu.api.Student@1540e19d
        //6.2打印结果2:当重写了toString()时,打印的是对象的属性与属性值
        System.out.println(s);//Student{name='超超', age=18}

        //7.测试hashCode()
        System.out.println(s.hashCode());//356573597
        System.out.println(s2.hashCode());//1735600054

        //8.比较地址值equals()
        /*equals()的默认实现是"=="比较,比较的是两个对象的地址值
        * 如果不想比较地址值,而是比较属性值,需要重写equals()方法*/
        //System.out.println(s.equals(s2));//false
        //比较对象的类型+属性值,需要重写equals()
        System.out.println(s.equals(s2));//true
    }
}
//1.创建学生类
class Student{
    //2.属性--成员变量
    String name;
    int age;

    //3.生成构造方法
    //3.1生成无参构造Generate--》Constructor--》Selector None即可生成无参构造
    public Student() {
    }
    //3.2生成全参构造Generate--》Constructor--》Shift,ok

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //5.重写Object中的toString(),Generate--》toString()--》ok
    //Generate--》toString()
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    //equals()方法重写,Generate--》equals() and hashCode()--》一直Next
    @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);
    }
}

3.String

String是一个封装char[]数组的对象

String 字符串类型,使用""包裹
String底层维护了一个char[],不可以改变数组长度

被final修饰,是常量


3.1String类两种创建方式:


1)方式一:char[] value = {'a','b','c'};
                    String s = new String(value);--没有高效效果
2)方式二:String s = “abc”;高效的效果,由于数据会存在堆中常量池,如果第二次创建时,发现以前已经有创建过的资源,就不会再次创建了,拿来用就行
TIPS:String底层自动重写了equals()和toString(), 比较的是两个串的具体内容

package cn.tedu.api;
/*本类测试String类的用法*/
public class TestString {
    public static void main(String[] args) {
        //1.String类的创建方式1
        /*1.字符串底层维护的是一个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

        //2.String创建方式2
        /*此种创建方式有一个高效的效果,底层也会new String(),
        但是它存在堆中的常量池中,第二次创建时,会查看之前是否创建
        如果有,找到就行,就不再创建,效率高,只有这种创建方式才有高效的效果*/
        String s= "abc";
        String ss="abc";
        System.out.println(s == ss);//true
        System.out.println(s.equals(ss));//true,重写了比较的是串的具体内容
    }
}

3.2String类常用方法

charAt( )

获取指定数组下标值所存的内容

concat( )

拼接一次字符串,注意不影响原本的字符串

想多次使用拼接,可以把它保存为一个变量

startsWith( )

判断本串是否以指定字符开头

endsWith( )

判断本串是否以指定字符结尾

length( )

字符串的长度

indexOf( )

判断当前字符在本串第一次出现时的下标

lastIndexOf( )

判断当前字符在本串最后一次出现的下标

toLowerCase( )

本串内容转为小写

toUpperCase( )

本串内容转为大写

getBytes( )

查看地址值

Arrays.toString(s.getBytes( ))

把指定串转成字节数组

Arrays.toString(s.Split(“  ” ))

利用正则表达式来分割字符串,

并查看分割后的数组内容

substring( 3);

substring(1,3 );

截取指定下标值3以后的内容,包括下表3

截取子串,含头不含尾,(包含下表1,不包含下表3)

string.valueOf(10 )

把int类型转成String类型

trim()             去掉首尾空格

练习:String类常用方法的使用

package cn.tedu.api;

import java.util.Arrays;

/*本类测试String常用方法*/
public class TestString2 {
    public static void main(String[] args) {
        //1.1通过高效效果方式创建字符串
        String s ="abc";

        //1.2字符串的普通创建方式
        char[] value = {'a','b','c','d'};//静态数组初始化
        String ss = new String(value);

        //2.测试常用方法
        System.out.println(s.charAt(1));//b,获取指定数组下标值所存的内容

        System.out.println(s.concat("cxy"));//abccxy,拼接一次字符串,注意不影响原本的字符串
        System.out.println(s);//abc
        String s3 = s.concat("cxy");//多次使用拼接后的内容,可以把它保存为一个变量
        System.out.println(s3);

        System.out.println(s.startsWith("a"));//true,判断本串是否以指定字符开头
        System.out.println(s.endsWith("a"));//false,判断本串是否以指定字符结尾

        System.out.println(s == ss);//false,一个高效一个普通,比较的地址值不同
        System.out.println(s.equals(ss));//true,String重写了equals(),比较的具体内容

        System.out.println(s.length());//3,求本串的长度

        String s4 = "abcbc";
        System.out.println(s4.indexOf("b"));//1,判断当前字符在本串第一次出现的下标
        System.out.println(s4.lastIndexOf("b"));//3,判断当前字符在本串最后一次出现的下标

        System.out.println(s4.toLowerCase());//abcbc,把当前串转为小写
        System.out.println(s4.toUpperCase());//ABCBC,把当前串转为大写

        System.out.println(s.getBytes());//[B@1540e19d,查看地址值
        System.out.println(Arrays.toString(s.getBytes()));//[97, 98, 99],把指定串转成字节数组

        String s5 = "a b c d e";
        //本方法是根据指定的内容来分割本字符串,返回值类型是String[]
        System.out.println(s5.split(" "));//[Ljava.lang.String;@677327b6,数组的地址值
        System.out.println(Arrays.toString(s5.split(" ")));//[a, b, c, d, e],查看分割后的数组内容
        System.out.println(s5.substring(3));// c d e,从3开始截取后面的内容
        System.out.println(s5.substring(1,5));// b c,截取子串,含头不含尾

        s5 = "    abcde    ";
        System.out.println(s5.trim());//abcde,本方法用于去除首尾两端的空格

        System.out.println(String.valueOf(10));//10,把int类型转成String类型
        System.out.println("20"+10);//2010,String类型数据与int类型数据拼接
        System.out.println(String.valueOf(10)+10);//1010,int 10 转成String 10 后进行拼接
        System.out.println(10+10);//20,int + int,结果是int20

    }
}

4.StringBuilder类/StringBuffer

与拼接符加号相比,append()方法拼接的效率高,但是StringBuffer更安全

package cn.tedu.api;
/*本类用于练习字符串的拼接StringBuilder/StringBuffer*/
public class TestString {
    public static void main(String[] args) {

        String s = "abcdefghijklmnopqrstuvwxyz";

        //method(s);
        method2(s);
    }
     //创建StringBuilder/StringBuffer进行拼接的方法
    private static void method2(String s) {
        /*优化1:创建并使用可变字符序列的对象,StringBuilder/StringBuffer*/
        StringBuffer sb = new StringBuffer();
        StringBuilder sb2 = new StringBuilder();
        //3.1增加一个计时效果,记录系统当前时间作为开始时间
        long t1 = System.currentTimeMillis();

        for(int i = 1;i<=10000;i++){
            /*优化2:不再使用加号拼接,而是使用append()*/
            sb.append(s);//使用工具类对象sb拼接字符串s
            //sb2.append(s);//两个对象都可以拼接,用一个就行
        }
        //3.2记录系统当前时间作为结束时间
        long t2 = System.currentTimeMillis();
        System.out.println(s);//不会改变原串
        System.out.println(sb);//直接打印即可
        //System.out.println(sb.toString());
        //3.3打印总耗时
        System.out.println(t2-t1);

    }


    private static void method(String s) {
        String result ="";
        //计时:增加一个开始时间
        long t1 = System.currentTimeMillis();
        for(int i =1;i<=10000;i++){
            result=result.concat(s);//concat()拼接
        }
        //增加一个结束的时间
        long t2 = System.currentTimeMillis();
        System.out.println(result);
        //计时总共耗时
        System.out.println(t2-t1);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值