学习笔记 java学习(五)

Object
顶级父类 所有类都把Object作为超类(直接或间接继承)
tostring()
重写前:打印的是对象的地址值
重写后:打印的是对象的属性与属性值
equals()
重写前:比较的是两个对象的地址值,底层使用==判断。
重写后:比较的是两个对象的:类型+属性+属性值
hashCode()
返回对象的哈希码值
例题:

package cn.tedu.api;

import java.util.Objects;

/**本类用于测试顶级父类Object*/
public class TestObject {
    public static void main(String[] args) {
        //4.创建对象进行测试
        Student s=new Student();
        Student s2=new Student("李逵",3);
        System.out.println(s);//打印的是地址值cn.tedu.api.Student@5cad8086
        //5重写,重写后打印的是对象的属性与属性值
        System.out.println(s2);
        //6.测试hashcode()
        /**返回该对象的哈希码值,用来区分不同的对象,不同的对象生成的哈希码值不同*/
        //查看源码的方式,按住ctrl,鼠标移动到目标位置,点击即可
        System.out.println(s2.hashCode());
        Student ss=new Student("李逵",3);
        //7.1重写前
        //System.out.println(s2.equals(ss));//false
    }
}
//1.创建学生类用于测试
class Student extends Object{
    //2.定义属性
    String name;
    int age;
    //3.创建构造函数
    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //5.重写tostring

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    //7.2添加重写的equals
    @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);
    }
}
package cn.tedu.api;
/**本类用于练习String的创建和常用方法*/
public class TestString {
    public static void main(String[] args) {
        //1.练习创建String的方式一
        /**1.宗福传底层维护的是char【】,存放在堆中*/
        char[] value={'a','b','c'};
        String s1=new String(value);//触发含餐构造来创建String类对象
        String s11=new String(value);//触发含餐构造来创建String类对象
        //2.练习创建String的方式二:
        /**2.此种方式创建底层也会new String(),存放在堆中常量池,效率高*/
        String s2="abc";
        String s22="abc";
        //3.测试
        /**3.双等比较的是地址值,
         * Object类中equals()默认实现比较的也是==地址比较
         * 但是String类重写了此方法,不再比较地址值,二十两个串的具体内容
         * 也就是说不论创建方式,只要串的内容一致,equals()就返回true*/
        System.out.println(s1==s2);//false
        System.out.println(s1==s11);//false
        System.out.println(s2==s22);//true
        System.out.println(s1.equals(s2));//true
        System.out.println(s1.equals(s11));//true
    }
}

String
1.字符串类型使用“”进行包裹,String底层维护了一个char[]
2.String 的创建方法
1)String s = “abc” 写法简单,效率高,存放在堆量池中
2)char[] value = {‘a’,‘b’,‘c’};String s2=new String(value);效率低,看见一个创建一个
3.String重写了Object中的equals(),不比较两个对象的地址值,而是比较串的内容
4.String API总结
int hashCode() 返回此字符串的哈希码。
boolean equals(Object anObject) 将此字符串与指定的对象比较,比较的是重写后的串的具体内容
String toString() 返回此对象本身(它已经是一个字符串!)。

int length() 返回此字符串的长度。
String toUpperCase() 所有字符都转换为大写。
String toLowerCase() 所有字符都转换为小写
boolean startsWith(String prefix) 测试此字符串是否以指定的元素开头。
boolean endsWith(String suffix) 测试此字符串是否以指定的字符串结束。

char charAt(int index) 返回指定索引/下标处的 char 值/字符
int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。
int lastIndexOf(int ch) 返回指定字符在此字符串中最后一次出现处的索引。
String concat(String str) 将指定字符串连接/拼接到此字符串的结尾,注意:不会改变原串
String[] split(String regex) 根据给定元素来分隔此字符串。

String trim() 返回去除首尾空格的字符串
byte[] getBytes() 把字符串存储到一个新的 byte 数组中
String substring(int beginIndex) 返回一个新子串,从指定下标处开始,包含指定下标
String substring(int beginIndex, int endIndex) 返回一个新子串,从执定下标开始,到结束下标为止,但不包含结束下标
static String valueOf(int i) 把int转成String
例题:

package cn.tedu.api;

import java.util.Arrays;
import java.util.Locale;

import static com.sun.org.apache.xalan.internal.lib.ExsltStrings.split;

/**本类用于练习String类的常用方法*/
public class TestString2 {
    public static void main(String[] args) {
        //1.创建字符串
        String s="abbc";
        char[] value={'a','b','c','d'};
        String ss=new String(value);
        //2.测试常用方法
        System.out.println(s.charAt(1));//b,获取指定下标处的字符
        s.concat("cxy");//拼接字符串,不改变原串
        System.out.println(s.concat("cxy"));
        System.out.println(s.endsWith("y"));//false,判断是否以指定元素结尾
        System.out.println(s.startsWith("a"));//true,判断是否以指定元素开头
        System.out.println(s.indexOf("b"));//1.获取指定元素第一次出现0的下标值
        System.out.println(s.lastIndexOf("b"));//4 获取指定元素的最后出现的下标值
        System.out.println(ss.length());//5.获取指定字符串的长度
        String s3="a b c d e";
        //根据指定规则分割字符串,注意返回值类型是String【】,需要使用数组工具类打印
        System.out.println(s3.split(""));//[Ljava.lang.String;@5cad8086
        System.out.println(Arrays.toString(s3.split("")));
        //根据指定下标截取子串,如果只有一个下标,那就从指定位置处开始截取,包含指定下标
        //如果有俩哥哥下标,就截取这两个下标之间的子串,注意含头不含尾
        System.out.println(s3.substring(3));//c d e,[3,结束]
        System.out.println(s3.substring(1,5));//b c,[1,5)
        System.out.println(s3.toLowerCase());//abcde,将字母全部转化为小写
        System.out.println(s3.toUpperCase(Locale.ROOT));//ABCDE,将字母全部转化为大写

        s3="   asda   ";
        System.out.println(s3.trim());//asda,去除指定字符串首尾空格
        System.out.println(String.valueOf(10));//10,转为sstring类型的"10
        System.out.println("20"+10);//2010
        System.out.println(String.valueOf(80)+10);//8010
    }
}

String builder和string buffer
特点:
1.封装了char[]数组
2.是可变的字符序列
3.提供了一组可以对字符内容修改的方法
4.常用append()来代替字符串做字符串连接”+”
5.内部字符数组默认初始容量是16:super(str.length() + 16);
6.如果大于16会尝试将扩容,新数组大小原来的变成2倍+2,容量如果还不够,直接扩充到需要的容量大小。int newCapacity = value.length * 2 + 2;
7.StringBuffer 1.0出道线程安全,StringBuilder1.5出道线程不安全
常用方法:append()
例题:字符串拼接

package cn.tedu.api;
/**本类用于*/
public class TestString3 {
    public static void main(String[] args) {
        //method();//普通字符串拼接
        method2();//高效
    }
    private static void method(){
        //需求:拼接打印26个小写字母10000次
        String a="";
        String str="abcdefghijklmnopqrstuvwxyz";
        //给程序添加一个计时的功能
        long t1=System.currentTimeMillis();
        for(int i=0;i<10000;i++){
            a=a.concat(str);
        }
        System.out.println(a);
        long t2=System.currentTimeMillis();
        System.out.println(t2-t1);
        System.out.println("********************************");
    }
    private static void method2(){
        String str="abcdefghijklmnopqrstuvwxyz";
        StringBuilder sb=new StringBuilder();
        StringBuffer sb2=new StringBuffer();
        long t1=System.currentTimeMillis();
        for(int i=0;i<10000;i++){
            sb2.append(str);
        }
        System.out.println(sb2);
        long t2=System.currentTimeMillis();
        System.out.println(t2-t1);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值