目录
Object类
java.lang.Object 类是Java语言中的根类,即所有类的父类。如果一个类没有特别指定父类, 那么默认则继承自Object类。
Object类当中包含的方法有11个。今天我们主要学习其中的2个:
- public String toString() :返回该对象的字符串表示。
- public boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”。
toString方法
public String toString() :返回该对象的字符串表示。
列:toString()练习
public class Person {
private String name;
private int age;
public Person() {
}
public Person(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;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
}
如果对象没有写toString方法,打印地址值。写了toString方法,打印对象内容
public static void main(String[] args) {
Person person=new Person("老赵",19);
String s = person.toString();
System.out.println(s);
//看一个类是否重写了toString,直接打印这个类的对象即可,如果没有重写toString方法那么打印的是对象的地址值
Random random=new Random();
String s1 = random.toString();
System.out.println(s1);//java.util.Random@7f63425a
//Scanner重写了toString方法
Scanner sc=new Scanner(System.in);
String s2 = sc.toString();
System.out.println(s2);//java.util.Scanner[delimiters=\p{javaWhitespace}+][position=0][match valid=false][need input=false][source closed=false][skipped=false][group separator=\,][decimal separator=\.][positive prefix=][negative prefix=\Q-\E][positive suffix=][negative suffix=][NaN string=\QNaN\E][infinity string=\Q∞\E]
// ArrayList重写了toString方法
ArrayList<Integer> list=new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
String s3 = list.toString();
System.out.println(s3);
}
equals方法
public boolean equals(Object obj) :指示其他某个对象是否与此对象“相等”
equals()默认地址比较。如果没有覆盖重写equals方法,那么Object类中默认进行对象地址比较。如果对象重写了equals方法则比较对象内容
public class Person {
private String name;
private int age;
。。。
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
}
public static void main(String[] args) {
Person p1=new Person("老赵",19);
Person p2=new Person("老赵",19);
System.out.println(p1.equals(p2));//对象重写了equals方法,进行对象内容的比较
//重写equals()方法
Person p3=new Person("老赵",19);
Person p4=new Person("老赵",19);
System.out.println(p3==p4);//p3,p4对象地址比较
System.out.println(p3+"\n"+p4);
}
Objects类
,在JDK7添加了一个java.util.Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是 null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表 示形式、比较两个对象。
格式:public static boolean equals(Object a, Object b) :判断两个对象是否相等。
public static void main(String[] args) {
String s1="abc";
String s2="abc";
System.out.println(s1.equals(s2));
String s3=null;
try {
System.out.println(s3.equals(s1));// null是不能调用方法的,会抛出空指针异常
}catch (Exception e){
System.out.println(e);//java.lang.NullPointerException
}
System.out.println(Objects.equals(s1,s3));//false
}
System类
java.lang.System 类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有:
- public static long currentTimeMillis() :返回以毫秒为单位的当前时间。
- public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :将数组中指定的数据拷贝到另一个数组中。
currentTimeMillis()方法
返回毫秒为单位的当前时间
public static void main(String[] args) {
//获取当前系统时间到1970 年 1 月 1 日 00:00:00经历了多少毫秒
System.out.println(System.currentTimeMillis());//1597762372201
}
arraycopy方法
public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) :将 数组中指定的数据拷贝到另一个数组中。
参数序号 | 参数名称 | 参数类型 | 参数含义 |
1 | src | Object | 源数组 |
2 | srcPos | int | 源数组索引起始位置 |
3 | dest | Object | 目标数组 |
4 | destPos | int | 目标数组索引起始位置 |
5 | length | int | 复制元素个数 |
列:将src数组中前3个元素复制到dest数组的前3个位置上,复制元素前:src数组元素[1,2,3,4,5],dest数组元素[6,7,8,9,10], 复制元素后:src数组元素[1,2,3,4,5],dest数组元素[1,2,3,9,10]
import java.util.Arrays;
public class Demo01System {
public static void main(String[] args) {
demo01();
System.out.println("-------------------------");
demo02();
}
public static void demo01() {
long time = System.currentTimeMillis();
System.out.println(time);
}
/* public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length):
将数组中指定的数据拷贝到另一个数组中。*/
public static void demo02() {
int[] src = new int[]{1, 2, 3, 4, 5};
int[] dest = {6, 7, 8, 9, 10};
System.out.println("复制前数组数据:" + Arrays.toString(dest));
System.arraycopy(src, 0, dest, 0, 3);
System.out.println("复制后数组数据" + Arrays.toString(dest));
}
}