Object&String

Object类

Object类概述

java.lang.Object类是Java语言中的根类,即所有类的父类。它中描述的所有方法子类都可以使用。在对象实例化的时候,最终找的父类就是Object。如果一个类没有特别指定父类,那么默认则继承自Object类。

tostring方法

  • public String toString():返回该对象的字符串表示
    toString方法返回该对象的字符串表示,其实该字符串内容就是对象的类型+@+内存地址值。
    由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

  • 覆盖重写

    如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写

    public class Person {  
        private String name;
        private int age;
    
        @Override
        public String toString() {
            return "Person{" + "name='" + name + '\'' + ", age=" + age + '}';
        }
    
        // 省略构造器与Getter Setter
    }
    

    在idea里可以使用快捷键 alt+inset 快速生成toString方法

equals方法

  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
    调用成员方法equals并指定参数为另一个对象,则可以判断这两个对象是否是相同的。这里的“相同”有默认和自定义两种方式。

  • 默认比较方式

    如果没有覆盖重写equals方法,那么Object类中默认进行==运算符的对象地址比较,只要不是同一个对象,结果必然为false。

  • 重写equals方法

    如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。

    public class Student extends Object {
    
        private String name;
        private int age;
        public Student() {
        }
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
        //直接自动生成即可 alt + insert 生成
        @Override
        public boolean equals(Object obj) {
    		//当然你也可以自己书写比较内容
            Student s = (Student)obj;
            if(this.name.equals(s.name) && this.age == s.age) {
                return true;
            }else {
                return false;
            }
        }
    }
    
    public class StudentDemo {
        public static void main(String[] args) {
    
            Student s1 = new Student("测试",20);
            Student s2 = new Student();
    
            // ==:比较引用类型比较的是地址值是否相同
            System.out.println(s1 == s2 );//false
    
            // ==: 比较基本数据类型比较的是值是否相同
            int a = 3;
            int b = 4;
            System.out.println(a == b );//false
            System.out.println("====================");
    
            //equals: 比较两个对象比较的是地址值是否相同
            System.out.println(s1.equals(s2));//false
            System.out.println(s1.equals(s1));//true
            System.out.println("================");
    
            //我们重写equals,让比较两个对象的值
            Student s4 = new Student("测试",20);
            System.out.println(s1.equals(s4));
            
            System.out.println("基本数据类型不能使用equals,因为只有类才可以继承object");
        }
    }
    

面试题

  • equals 和 hashCode 的关系
    1)如果两个对象需要相等(equals),那么它们必须有着相同的哈希码(hashCode);

    2)但如果两个对象有着相同的哈希码,它们却不一定相等。

        public static void main(String[] args) {
            Hello hello1 = new Hello();
            System.out.println(hello1.hashCode());//356573597
    
            // Hello hello2 = new Hello();
            Hello hello2 = hello1;
            System.out.println(hello2.hashCode());//356573597
    
            System.out.println(hello1.equals(hello2));//true
        }
    

String类

String类概述

String类代表字符串。Java程序中所有的字符串文字(例如“abc”)都可以被看作是实现类的实例。
String类中包括用于检查各个字符串的方法,比如用于比较字符串,搜索字符串,提取字符串,以及创建具有翻译为大写小写的所有字符的字符串的副本。

String类的特点

  • 字符串不变:字符串的值在创建后不能被更改

    String s1 = "abc"; 
    s1 += "d"; 
    System.out.println(s1); // "abcd" 
    // 内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。
    
  • 因为String对象是不可变的,所以它们可以被共享

    String s = "abc";
    String s1 = "abc";
    System.out.println(s == s1);//true
    
    String s2 = new String("abc");
    String s3 = new String("abc");
    System.out.println(s2 == s3);//false
    System.out.println(s2.equals(s3));//true
    

在这里插入图片描述

  • String的本质是
    • JDK8之前是char[] 数组
    • JDK8之后是byte[] 数组

String类使用步骤

  • 查看类

    java.lang.String:此类不需要导入

  • 查看构造方法

    方法名说明
    public String()初始化新创建的String对象,以使其表示空字符序列
    public String(char[] value)通过当前参数中的字符数组来构造新的String。
    String(char[] value, int offset, int count)通过当前参数中的字符数组的一部分来构造新的String。
    String(byte[] bytes)通过使用平台的默认字符集解码当前参数中的字节数组来构造新的
    String(byte[] bytes, int offset, int length)通过使用平台的默认字符集解码当前参数中的字节数组的一部分来构造新的String
  • 基本代码演示

    // 无参构造
    String str = new String();
    
    // 通过字符数组构造
    char chars[] = {'a', 'b', 'c'};     
    String str2 = new String(chars);
    
    // 通过字节数组构造
    byte bytes[] = { 97, 98, 99 };     
    String str3 = new String(bytes);
    

在这里插入图片描述

String类常用的方法

判断功能的方法

String类的判断功能:
boolean equals(Object obj):比较字符串的内容是否相同,区分大小写
boolean equalsIgnoreCase(String str):比较字符串的内容是否相同,忽略大小写
boolean contains(String str):判断大字符串中是否包含小字符串
boolean startsWith(String str):判断字符串是否以某个指定的字符串开头
boolean endsWith(String str):判断字符串是否以某个指定的字符串结尾
boolean isEmpty():判断字符串是否为空。

注意:
字符串内容为空和字符串对象为空。
String s = "";内容为空
String s = null; 字符串对象为空

获取功能的方法

public int length() :返回此字符串的长度
public String concat(String str):将指定的字符串连接到该字符串的末尾。
public char charAt(int index):返回指定索引处的char值。
public int indexOf(int ch):返回指定子字符串第一次出现在该字符串内的索引。
public String substring(int beginIndex):返回一个子字符串,从beginIndex开始截取字符串到字符串结尾。
public String substring(int beginIndex,int endIndex):返回一个子字符串,从beginIndex到endIndex截取字符串。含beginIndex,不含endIndex。

转换功能的方法

public char[] toCharArray():将此字符串转换为新的字符数组。
public byte[] getBytes():使用平台的默认字符集将该String编码转换为新的字节数组。
public String replace(char oldChar, char newChar):将oldChar匹配的字符串使用newChar字符串替换。
public String replaceFirst(String regex,String replacement):用给定的 replacement 替换此字符串匹配给定的regex的第一个子字符串。 
public String toUpperCase():将字符中转换为大写
public String toLowerCase():将字符中转换为小写

分割-替换-去空格-正则的功能方法

public String[] split(String regex):将此字符串按照给定的regex(规则)拆分为字符串数组。
public String trim():去除该字符串的两端空格
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoatsZhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值