day05 :Java Object,equals,hashCode,String

如果父类没有空参构造方法
//子类继承就会报错 因为子类的中含有空参构造
//并且在空参构造方法的第一行默认有super()调用父类的空参构造
//如果父类没有空参构造方法 则报错
// super();

Object
    java.lang.Object  
         java中所有类的根类 所有的类都直接或者间接继承自Object类
    构造方法
        public Object()
    toString
        public String toString ()
      返回该对象的字符串表示。  类名+@+地址值(哈希值)
      在Object类中打印的是地址值 ,我们查看地址值没有用
      子类一般都会重写此方法 返回对象的属性值
        Person类重写Object类的toString方法
         返回对象的属性值 对于当前Person类来说
         就是返回name和age的值
            
        简单来说打印的是引用类型的内容/属性,而不是地址值
    equals
        Object类方法
      boolean equals(Object obj)
            指示其他某个对象是否与此对象“相等”。
如果不重写此方法 比较的是两个对象的地址值
子类一般都会选择重写此方法  不再比较地址值 而是比较属性值
            (  A ==  B  ) 
    如果比较基本类型 比较的是基本类型的数值是否相等
    如果比较引用类型 比较的是地址值是否相同
(A.equals(B))
    如果比较引用类型 比较的是内容是否相同
         Person重写equals方法
         不再比较地址值 而是比较属性值
         也就是比较两个对象的name和age的值
            重写:
public boolean equals(Object obj) {
        //如果是同一个对象 直接返回true
        if (this == obj){
            return true;
        }
        //this不为null obj为null
        if(obj == null){
            return  false;
        }
        return   true;
    hashCode
        Object类
         public int hashCode() 
            获取对象的哈希值
哈希值:可以理解为一个唯一值 相当于人一出生的身份证号  可以理解为是逻辑地址
        如果不重写Object类的hashCode方法 比较两个对象的hashCode就是比较两个对象的地址值
        如果重写了Object类HashCode方法 比较两个对象的hashCode就是比较两个对象的内容
            如果想确定内容是否真的相同
可以先比较两个对象的hashCode
不同 说明这两个对象的内容一定不同
相同 不能说明这两个对象一定相同 需要继续比较equals
不同  一定不同
相同  则相同
        重写: 
public int hashCode() {
        int result = name != null ? name.hashCode() : 0;
        result = 31 * result + age;
        return result;
    }

String
    特点
        java.lang.String
      1.所有字符串字面值 都是字符串对象 "abc"
      2.字符串是常量  一旦创建 不能改变
      3.因为不可改变 所以可以共享
            
    字符串的比较
        构造方法
              public String();
              public String(String str)
            String s = new String();
String s2 = "";
System.out.println("|"+s+"|");
//  ||
System.out.println("|"+s2+"|");
//  ||
            String s3 = "abc";
String s4 = new String("abc");
System.out.println(s3 == s4);//比较地址值  false
System.out.println(s3.equals(s4));//比较内容 true
    字符、字节转换成字符串
        String 构造方法
                  public String(char[] chs);
                  public String(char[] chs,int start ,int length)
                  public String(byte[] bytes)
                  public String(byte[] bytes,int start ,int length)
            //字符数组 --->String
        char[] chs = {'a','b','c','d'};
 //将字符数组转换为字符串
        String s = new String(chs);
        System.out.println(s);
 //将字符数组的一部分转换为字符串  从1索引开始 转换3个
        String s2 = new String(chs,1,3);
        System.out.println(s2);
            //将字节数组  --->String
        byte[] bytes = {65,66,67,68};
//将字节数组转换为字符串  解码
        String s4 = new String(bytes);
        System.out.println(s4);
 //将字节数组的一部分转换为字符串 从0索引 转换两个
        String s5 = new String(bytes,0,2);
        System.out.println(s5);
        将字符串转换为字符数组
           String 类
                public char[] toCharArray();
将字符串转换为字节数组
           String 类
                 public byte[] getBytes();
            //将str转换为字符数组
        char[] chars = str.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }
            //将str转换为字节数组
        byte[] strBytes = str.getBytes();
        for (int i = 0; i < strBytes.length; i++) {
            System.out.println(strBytes[i]);
        }
    根据索引找字符
        public  char charAt(int index) 根据索引找字符
                  String s = "I Love Java";
//根据索引找字符 如果索引不存在 抛出越界异常StringIndexOutOfBoundsException
      char c = s.charAt(0);
      System.out.println(c); //输出 'I'
//获取字符串长度
       System.out.println(s.length());
                for(int i = 0;i<s.length();i++){
            char ch = s.charAt(i);
            System.out.println(ch);
        }
        长度
         数组
             length属性
         集合
             size()方法
         字符串
             length()方法
            //将字符串转为字符数组并遍历
        char[] chs = s.toCharArray();
        for (int i = 0; i < chs.length; i++) {
            System.out.println(chs[i]);
        }
    查找字符在字符串中出现的位置
        int  indexOf(int ch) 查找当前字符 在字符串中第一次出现的索引位置
int indexOf(int ch,int fromIndex) 从fromIndex开始查询
            String str = "I Love Java";
 int index = str.indexOf('a');
 System.out.println(index);
      //字符a第2次出现的索引位置
 int index2 = str.indexOf('a', index + 1);
  System.out.println(index2);
            //ab在str2中第二次的索引位置
        int abIndex2 = str2.indexOf("ab", abIndex + "ab".length());
        int lastIndexOf(int ch)  查询指定字符 在字符串中最后一次出现的索引
int lastIndexOf(String str)
            //查询\在字符串中最后一次出现的索引位置
        int indexOf = path.lastIndexOf('\\');
        System.out.println(indexOf);
    字符串截取
        String substring(int startIndex)  从开始索引截取到末尾
String substring(int startIndex,int endIndex)  [start,end)
            //截取Love 开始索引为2  结束索引为6  不包含6
        String substring1 = str.substring(2, 6);
        System.out.println(substring1);
             //获取文件名
        //获取\\最后一次出现的索引位置
        int lastIndex = path.lastIndexOf("\\");
        //从\\最后一次的索引+1开始截取 截取到末尾
        String fileName = path.substring(lastIndex + 1);
        System.out.println(fileName);
    字符串大小写转换
        String toUpperCase() 字符串转大写
String toLowerCase() 字符串转小写
             //转大写
        String s1 = s.toUpperCase();
        System.out.println(s1);
//转小写
        String s2 = s.toLowerCase();
        System.out.println(s2);
    字符串判断开头、结尾
        boolean startsWith(String s) 判断开头
boolean endsWith(String s) 判断结尾
            //判断字符串是否以I开头
        boolean b = s.startsWith("I");
        System.out.println(b);
//判断字符串 是否以java结尾
        boolean b2 = s.endsWith("java");
        System.out.println(b2);
            //判断文件是否是Java文件
        boolean b3 = fileName.toLowerCase().endsWith(".java");
        System.out.println(b3);
    字符串拼接、去空格
        String concat(String s) 字符串拼接
            String s = "abc".concat("bcd");
        String trim() 去掉字符串两端的空格
            String str = "      ab       c    ";
String str2 = str.trim();
    字符串内容替换、切割
        String replace(char oldChar,char newChar) 将字符串中 oldChar 替换成newChar
            String str = "abcdea";
        //将字符'a'替换成*
String str2 = str.replace('a', '*');
        String repalce(String oldString,String newString)
            String str3 = str.replace("ab", "****");
System.out.println(str3);
            //将" ------ "替换成一个" * "
        String s1 = names.replaceAll("-+", " * ");
        System.out.println(s1);
        String[] split(String regex) 切割字符串
            String nameStr = "柳岩-------唐嫣----金莲--大郎";
        String[] arr = nameStr.split("-+");
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
2.没有难点,都需要记住

3.开心,充实

4.总结StringBuilder,Date,Calendar,ArrayList添加/删除索引,冒泡排序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值