• 【JavaEE重点知识归纳】第10节:Object类和String类


    目录

    一:Object类

    1.概念

    2.获取对象信息

    3.对象比较equals方法

    4.hashCode方法

    二:String类

    1.String类的重要性

    2.常用方法

    3.StringBuilder和StringBuffer


    一:Object类

    1.概念

    (1)Object类是Java默认提供的类。Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Obiect父类。即所有的类的对象都可以使用Object的引用进行接收

    (2)Object类是参数的最高统一类型。是所有类的父类。

    2.获取对象信息

    (1)如果要打印对象中的内容,可以直接重写Object类中的toString()方法

    (2)Object类中的toString()

    3.对象比较equals方法

    (1)在Java中,进行比较时:

            1)如果==左右两侧是基本类型变量,比较的是变量中的值是否相同

            2)如果==左右两侧是引用类型变量,比较的是引用变量地址是否相同

            3)如果要比较对象中的内容,必须重写Object中的equals方法默认也是按照地址比较的

    (2)equals没有被重写时:

    1. class Person{
    2. private String name;
    3. private int age;
    4. public Person(String name, int age) {
    5. this.name = name;
    6. this.age = age;
    7. }
    8. }
    9. public class Test {
    10. public static void main(String[] args) {
    11. Person person1=new Person("张三",18);
    12. Person person2=new Person("张三",18);
    13. int a=10,b=10;
    14. System.out.println(a==b);
    15. System.out.println(person1==person2);
    16. System.out.println(person1.equals(person2));
    17. }
    18. }

     (3)equals被重写时:

    比较对象中的内容是否相同的时候,一定要重写equals方法 

    1. class Person{
    2. private String name;
    3. private int age;
    4. public Person(String name, int age) {
    5. this.name = name;
    6. this.age = age;
    7. }
    8. @Override
    9. public boolean equals(Object obj) {
    10. if(obj==null){
    11. return false;
    12. }
    13. if(obj==this){
    14. return true;
    15. }
    16. if(!(obj instanceof Person)){
    17. return false;
    18. }
    19. Person person=(Person)obj;
    20. return this.name.equals(person.name)&&this.age==person.age;
    21. }
    22. }
    23. public class Test {
    24. public static void main(String[] args) {
    25. Person person1=new Person("张三",18);
    26. Person person2=new Person("张三",18);
    27. int a=10,b=10;
    28. System.out.println(a==b);
    29. System.out.println(person1==person2);
    30. System.out.println(person1.equals(person2));
    31. }
    32. }
    4.hashCode方法

    (1)hashCode方法是一个native方法,底层是由C/C++代码写的

    (2)hashCode方法用来判断对象在存储位置是否相同

    (3)事实上hashCode()在散列表中才有用,其他情况下没用。在散列表中hashCode()的作用是获取对象的散列码,进而确定该对象在散列表中的位置

    (4)hashCode没有被重写时:

    1. class Person{
    2. private String name;
    3. private int age;
    4. public Person(String name, int age) {
    5. this.name = name;
    6. this.age = age;
    7. }
    8. }
    9. public class Test {
    10. public static void main(String[] args) {
    11. Person person1=new Person("张三",18);
    12. Person person2=new Person("张三",18);
    13. System.out.println(person1.hashCode());
    14. System.out.println(person2.hashCode());
    15. }
    16. }

    (5)hashCode被重写时:

    1. import java.util.Objects;
    2. class Person{
    3. private String name;
    4. private int age;
    5. public Person(String name, int age) {
    6. this.name = name;
    7. this.age = age;
    8. }
    9. @Override
    10. public int hashCode() {
    11. return Objects.hash(name,age);
    12. }
    13. }
    14. public class Test {
    15. public static void main(String[] args) {
    16. Person person1=new Person("张三",18);
    17. Person person2=new Person("张三",18);
    18. System.out.println(person1.hashCode());
    19. System.out.println(person2.hashCode());
    20. }
    21. }

    二:String类

    1.String类的重要性

    (1)C语言中没有字符串类型,只能使用字符数组和字符指针来表示

    (2)由于字符串非常重要,应用广泛,因此Java提供了专门的String类

    2.常用方法

    (1)字符串构造

            1)常用的三种构造方式

            2)String 是引用类型,本身不存储字符串本身;在Java中,用" "引起来的也是String类型

    (2)String对象的比较

            字符串的比较是常见操作之一,比如,字符串排序,在Java中给出了4种方式

            1)==比较是否引用同一个对象:对于基本数据类型,==比较的是变量中的值;对于引用类型,==比较的是引用中的地址

            2)boolean equals(Object o):按照字典序(字符大小顺序)比较:String类重写了父类Object中的equals方法,Object中的equals默认是==比较,String重写了equals方法后,会对对象中的内容进行比较

            3)int compareTo(String s):按照字典序(字符大小顺序)比较:a.如果出现不等的字符,直接返回这两个字符的大小差值 b.如果前K个字符相等,返回值两个字符串长度差值

            4)int compareToIgnoreCase(String s):与compareTo方式相同,但是忽略大小写直接比较

    (3)字符串查找

    1. public class Test{
    2. public static void main(String[] args) {
    3. String s="aaabbbcccaaabbbccc";
    4. System.out.println(s.charAt(3));//'b'
    5. System.out.println(s.indexOf('c'));//返回'c'第一次出现的位置 6
    6. System.out.println(s.indexOf('c',10));//从下标为10的位置开始找‘c’第一次出现的位置
    7. System.out.println(s.indexOf("bbb"));//返回“bbb”第一次出现的位置
    8. System.out.println(s.indexOf("bbb",10));//从下标为10的位置开始找"bbb"第一次出现的位置
    9. System.out.println(s.lastIndexOf('c'));//从后往前找,返回'c'第一次出现的位置 6
    10. System.out.println(s.lastIndexOf('c',10));//从后往前找,从下标为10的位置开始找‘c’第一次出现的位置
    11. System.out.println(s.lastIndexOf("bbb"));//从后往前找,返回“bbb”第一次出现的位置
    12. System.out.println(s.lastIndexOf("bbb",10));//从后往前找,从下标为10的位置开始找"bbb"第一次出现的位置
    13. }
    14. }

    (4)转化

            1)数值和字符串转化

      

            2)字符串转数组

            3)格式化

    (5)字符串替换:使用新的字符串替换掉已有的字符串数据

    (6)字符串拆分:将一个完整的字符串按照指定的分隔符划分为若干个字符串

    (7)字符串截取

            1)从一个完整的字符串之中截取部分内容

            2)

    (8)其他操作方法

            1)trim会去掉字符串中开头和结尾的空白字符(空格、换行、制表符等)中间的去不了

            2)大小写转换

         

    (9)字符串的不可变性

            1)String类在设计的时就是不可变的,String类实现描述中已经说明了

                    a.String类被final修饰,表明该类不能被继承

                    b.value被final修饰了,表明value自身的值不能改变,即value不能引用别的对象,但是其引用对象中的内容是可以被修改的

            2)所有涉及到字符串内容的操作都是创建一个新对象,改变的是新对象

    (10)字符串修改

            尽量避免直接对String类型对象进行修改,因为String类是不能被修改的,所有的修改都会创建新法人对象,效率非常低下。

    3.StringBuilder和StringBuffer

    (1)由于String的不可更改特性,为了方便字符串的修改,Java又提供了StringBuilder和StringBuffer类。这两个类大部分是相同的,这里介绍StringBuilder常用的一些方法

    (2)

    ps:详细的大家可以上网查查

    (3)

    1. public class Test{
    2. public static void main(String[] args) {
    3. StringBuilder s1=new StringBuilder("hello");
    4. StringBuilder s2=s1;
    5. //尾插:字符、字符串、整型数字
    6. s1.append(' ');//hello
    7. s1.append("world");//hello world
    8. s1.append(123);//hello world123
    9. System.out.println(s1);//hello world123
    10. System.out.println(s1==s2);//true
    11. System.out.println(s1.charAt(0));//获取0号位上的字符 h
    12. System.out.println(s1.length());//获取字符串的有效长度 14
    13. System.out.println(s1.capacity());//获取底层数组的总大小
    14. s1.setCharAt(0,'W');//设置任意位置字符 Wello world123
    15. s1.insert(0,"haha!!!");//haha!!!Wello world123
    16. System.out.println(s1);
    17. System.out.println(s1.indexOf("123"));//获取123第一次出现的位置
    18. System.out.println(s1.lastIndexOf("123"));//获取123最后一次出现的位置
    19. s1.deleteCharAt(0);//删除首元素
    20. s1.delete(0,3);//删除[0,3)范围内的字符
    21. String str =s1.substring(0,5);//截取[0,5)区间的的字符以String的方式返回
    22. System.out.println(str);
    23. System.out.println(s1.reverse());//字符串逆转
    24. str=s1.toString();//将StringBuilder以字符串的方式返回
    25. System.out.println(str);
    26. }
    27. }

    (4)String和StringBuilder的最大的区别在于String的内容无法修改,而StringBuilder的内容可以修改,频繁修改字符串的情况可以考虑使用StringBuilder

    (5)String和StringBuilder类不能直接转换。如果想转换的话,可以采用下面的方法

            1)String变为StringBuilder,利用StringBuilder的构造方法或append()

            2)StringBuilder变为String:调用toString()方法

  • 相关阅读:
    基于VGG16的猫狗数据集分类
    SAP 控制VA02修改客户地址是否同步修改参考关联的销售订单
    java 写excel文件
    Python练习
    Linux 6.6 初步支持AMD 新一代 Zen 5 处理器
    java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化
    javaScript中Math内置对象基本方法入门
    数据挖掘(5)分类数据挖掘:基于距离的分类方法
    ros1-gazebo创建世界和机器人模型
    Linux内存管理(三十三):直接内存回收详解
  • 原文地址:https://blog.csdn.net/m0_74164458/article/details/133695200