一.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()方法 - 返回该对象的哈希码值
解释:
(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()方法 - 返回对象在内存中对应的地址值
一般来说打印返回地址值没什么意义,这就需要我们重写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方法的参数
一般来说比较两个对象地址值没什么意义,这就需要我们重写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"; 开辟一块儿在常量区内存
- 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方法,比较字符串的内容(区分大小写)是否相等。
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) -- 判断字符串中是否包含字符串
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字符串开头
- 4.endsWith(String s) -- 判断字符串是否以s字符串结尾
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() -- 判断字符串是否为空
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() -- 求字符串长度(空格作为字符存在)
public class DemoMain {
public static void main(String[] args) {
String s1 = "HelloWorld";
System.out.println(s1.length());//10
}
}- 2.charAt(int i) -- 求字符串当中指定的索引值,对应的字符。
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) 的字符串
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
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() -- 将字符串转换为字符数组
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() -- 将字符串中所有字符转换为大写
- 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
}
}