JavaSE笔记_day10_Object类、String类

335 阅读7分钟

一.Object类

1.Object的概述

  • Object类,来自于java.lang包 
  • Object是所有类的根类,最顶层父类。当一个类没有定义直接父类的时候,object类默认称这个类的父类。
  • Object类也有构造方法,可以创建对象,因为Object是顶层父类,Object再无父类,Object构造方法中,没有super();

//创建一个Object对象,java中来自于java.lang包中的类可以直接使用,不需要导包
Object obj = new Object();

2.Object类中常用方法

  • 1.getClass()方法  -  获得Person这个(类)Class

          返回值类型class类型

  • 2.getName()方法  - 以String的形式返回此 Class 对象所表示的实体(类、接口、数组类、基本类型或 void)名称。

         返回值类型String

public class Test{
    public static void main(String[] args) {
        Person p = new Person();
        //1.getClass()方法,返回值类型Class类型
        Class c = p.getClass();
        System.out.println(c);//class com.zgjy.objectDemo.Person
        //2.Class类中方法getName(),返回值类型,字符串类型
        String s = c.getName();
	System.out.println(s);//com.zgjy.objectDemo.Person
    }
}

  • 3.hashCode()方法 - 返回该对象的哈希码值
       返回值类型int类型

       解释: 

       (1).hashCode()方法一般用于比较,多个对象是否是同一个对象,去重复 

       (2).将每一个对象的内存地址,转换成一个int类型的数据进行返回,根据int类型结果是否相等,判断对象是否是同一个对象

public class Test{
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person();
        int hash1 = p1.hashCode();
        int hash2 = p2.hashCode();
        System.out.println(hash1);//284720968
        System.out.println(hash2);//189568618
        System.out.println(hash1 == hash2);//false
    }
}
验证规律:
    1.不同的对象,返回不一样的hashCode值
    2.相同的对象,返回相同的hashCOde值

  • 4.toString()方法  -  返回对象在内存中对应的地址值
        返回值类型String类型

       一般来说打印返回地址值没什么意义,这就需要我们重写toString方法 alt+insert ,打印成员变量值

public class Test{
    public static void main(String[] args) {
        Person p1 = new Person();
        String s = p1.toString();
        /*System.out.println(s);//没有重写前 打印地址值 com.zgjy.objectDemo.Person@10f87f48*/
        System.out.println(s);//重写之后 打印成员变量值Person{name='张三', age=20}
    }
}
public class Person {
    private String name = "张三";
    private int age = 20;
    @Override
    public String toString() {//重写toString()
        return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
        '}';
    }
}

  • 5.equals()方法  - 用于比较两个对象是否相等,两个对象分别是:一个是equals方法的调用者,一个是equals方法的参数
      返回值类型boolean类型 

      一般来说比较两个对象地址值没什么意义,这就需要我们重写equals方法,比较对象的成员变量的值

public class Test{
    public static void main(String[] args) {
        Person p1 = new Person();
        Person p2 = new Person("李四",20);
        //重写之前,比较p1对象和p2对象的地址值是否相等
        boolean b1 = p1.equals(p2);
        System.out.println(b1);//false
        //重写之后,比较p1对象和p2对象的内容是否相等 (例如:全班有50个叫小明的)
        boolean b2 = p1.equals(p2);
        System.out.println(b2);//false
    }
}
public class Person {
    private String name = "张三";
    private int age = 20;
    public Person(){
    }
    public Person(String name,int age ){
        this.name = name;
        this.age = age;
    }
    @Override
    public boolean equals(Object o) {//重写equals
        if (this == o)
            return true;
        if (!(o instanceof Person))
            return false;
        Person person = (Person) o;
        return age == person.age && name.equals(person.name);
    }
}

  • 6.==和equals的区别
               == 比较运算符,判断符号两边的数据是否相等 
               equals()方法,判断两个对象是否相等 
      区别: 
      1.==,可以比较基本数据类型,判断两个数据是否相等。 ==,可以比较引用数据类型,判断两个对象的地址值是否相等。 
      2.equals()方法,不能比较基本数据类型 
        equals()方法,可以比较引用数据类型,重写前比较两个对象的地址值是否相等  重写后比较两个对象的成员变量值是否相等

二.String类

1.String类的概述

  • String类,来自于java.lang包,使用的时候不需要导包 
  • String就表示一个字符串,java中,所有的字面意义上的" ",都是String类型的对象 
  • String定义的字符串,是常量不可改变的,final修饰的char型数组,存储在方法区(和.class文件在一起)中的常量池

2.String类的构造方法

  • 1.String s1 = "123"; 开辟一块儿在常量区内存
        String s2 = new String("1234"); 开辟一块在常量区内存"1234",又new到堆内存中"1234" 共两块儿内存,为了让常量池存储的字符串,节省内存空间,如果有字符串与常量池中的字符串内容一致,那么两个字符串指向同一块内存空间。
  • 2.String(byte[] bytes): 将一个byte类型的数组转换成字符串
  • 3.String(byte[] b,int i ,int length): 将字节数组的一部分转换成字符串(从数组的i索引位置开始,截取length长度的字符)

public class StringDemo {
    public static void main(String[] args) {
        byte[] b = {97,98,99,100};
        String s1 = new String(b);
        System.out.println(s1);//abcd
        String s2 = new String(b,1,2);
        System.out.println(s2);//bc
    }
}

  • 4.String(char[] ch): 将一个字符数组,转换成字符串
  • 5.String(char[] , int i , int length): 将字符数组的一部分转换成字符串(从数组的i索引位置开始,截取length长度的字符)

public class StringDemo {
    public static void main(String[] args) {
        char[] a = {'A','b','8','中'};
        String s1 = new String(a);
        System.out.println(s1);//Ab8中
        String s2 = new String(a,1,2);
        System.out.println(s2);//b8
    }
}

3.String类中的判断方法

  • 1.equals(Object obj)  -- String重写了父类的equals方法,比较字符串的内容(区分大小写)是否相等。
       - 返回值类型 boolean

public class DemoMain {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "123";
        String s3 = "ABC";
        System.out.println(s1.equals(s2));//false
        System.out.println(s1.equals(s3));//false
    }
}

  • 2.contains(String s)  -- 判断字符串中是否包含字符串
       返回值类型 boolean

public class DemoMain {
    public static void main(String[] args) {
        String s1 = "Hello World";
        System.out.println(s1.contains("He"));//true
    }
}

  • 3.startsWith(String s)  --  判断字符串是否以s字符串开头
       返回值类型 Boolean
  • 4.endsWith(String s)  --  判断字符串是否以s字符串结尾
      返回值类型 Boolean

public class DemoMain {
    public static void main(String[] args) {
        String s1 = "Hello World";
        System.out.println(s1.startsWith("Hel"));//true
        System.out.println(s1.endsWith("ld"));//true
    }
}

  • 5.isEmpty()  --  判断字符串是否为空
      返回值类型 Boolean

public class DemoMain {
    public static void main(String[] args) {
        String s1 = null;
    //  System.out.println(s1.isEmpty());// 报错,java.lang.NullPointerException。用null值做任何操作都报空指针异常
        String s2 = "";//空字符串
        System.out.println(s2.isEmpty());//true
    }
}	

4.String类的获取功能

  • 1.length()  --  求字符串长度(空格作为字符存在)
      返回值类型 int

public class DemoMain {
    public static void main(String[] args) {
        String s1 = "HelloWorld";
        System.out.println(s1.length());//10
    }
}

  • 2.charAt(int i)  --  求字符串当中指定的索引值,对应的字符。
      返回值类型 char

public class DemoMain {
    public static void main(String[] args) {
        String s1 = "HelloWorld";
        System.out.println(s1.charAt(7));//'r'
    }
}
//遍历字符串中每一个字符
public class DemoMain {
    public static void main(String[] args) {
        String s1 = "HelloWorld";
        for (int i = 0; i < s1.length(); i++) {
            System.out.print(s1.charAt(i)+" ");// H e l l o W o r l d
        }
    }
}

  • 3.substring(int i)  -- 获取到字符串的一部分(从索引i开始 - 末尾)
  •   substring(int i , int j): 获取到索引 [i,j) 的字符串
         返回值类型 String

public class DemoMain {
    public static void main(String[] args) {
        String s1 = "1234abcd";
        System.out.println(s1.substring(5));//bcd
        System.out.println(s1.substring(1,5))//234a
    }
}

  • 4.indexOf(String s)  --  获取s字符串在方法调用字符串中第一次出现的索引位置,没有出现返回-1
       返回值类型 int

public class DemoMain {
    public static void main(String[] args) {
        String s1 = "11112324abcd";
        System.out.println(s1.indexOf("2"));//4
        System.out.println(s1.indexOf("9"));//-1
    }
}

5.String类的转换功能和其他功能

  • 1.toCharArray()  --  将字符串转换为字符数组
      返回值类型 char型数组

import java.util.Arrays;
public class DemoMain {
    public static void main(String[] args) {
        String s = "hello";
        char[] c = s.toCharArray();
        System.out.println(Arrays.toString(c));//将参数数组变成字符串(按照默认格式:[元素1,元素2,元素3...])//[h, e, l, l, o]
    }
}

  • 2.toUpperCase()  --  将字符串中所有字符转换为大写
      返回值类型 String
  • 3.toLowerCase() --  将字符串中所有字符转化为小写

public class DemoMain {
    public static void main(String[] args) {
        String s = "helloWORld123";
        String s1 =  s.toUpperCase();
        System.out.println(s1);//HELLOWORLD123
        String s2 = s.toLowerCase();
        System.out.println(s2);//helloworld123
    }
}	

  • 4.trim(): --  去除字符串前后的空格和tab

      返回值类型 String

public class DemoMain {
    public static void main(String[] args) {
        String s = "  ";
        String s1 = s.trim();
        System.out.println(s1.length());//0
        s = "   34 5  ";
        String s2 = s.trim();
        System.out.println(s2);//34 5
    }
}