API和Object
- API(Application Programming Interface)应用程序编程接口.
- Java API 就是Java提供的类这些类将底层的实现封装起来
- Object类 是所有类的根类,所有类都直接或者间接的继承自该类.
- 构造方法 public Object()
Object类中的hashCode()方法。
pubic int hashCode()
返回该对象的哈希码值,默认情况下会根据对象的地址值计算
不同对象的hashCode()一般不会相同,但是同一个对象的hashCode()值肯定是相同的
不是对象的实际地址值,乐意理解为逻辑地址值
package org.org.baidu;
public class Myclass7 {
public static void main(String[] args) {
//Object是所有类的根类,所有类直接或者间接的继承自该类
Object o1 = new Object();
int i = o1.hashCode();
Object o2 = new Object();
int i1 = o2.hashCode();
System.out.println(i);//返回该对象的哈希码值,不用的对象的哈希码值是不一样的
System.out.println(i1);
}
}
运行结果为:
356573597
1735600054
Object类中的getClass()方法。
public final Class getClass()
返回该Object类运行时类,可以通过Class中的public String getName()获取对象的真实类的全名称
package org.org.baidu;
public class Myclass7 {
public static void main(String[] args) {
//Objects是所有类的根类,所有类直接或者间接的继承自该类
//Object.class 字节码文件加载进内存-----JVM就会为Object.class文件创建一个对象。该对象的字节码文件只会创建一份
Object o1 = new Object();
Class aClass = o1.getClass();
Object o2 = new Object();
Class aClass1 = o2.getClass();
System.out.println(o1==o2);
System.out.println(aClass==aClass1);
System.out.println(aClass);
System.out.println(aClass1);
}
}
运行结果为:
false
true
class java.lang.Object
class java.lang.Object
Object类中的toString()方法。
public String toString()
源代码
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
等价于
getClass().getName() + '@' + Integer.toHexString(hashCode())
直接输出new出来的是他的地址,可以重写他的方法返回该类的所有成员变量。
package org.baidu1;
public class Mytest {
public static void main(String[] args) {
Dog dog = new Dog("小花",23);
System.out.println(dog);
}
}
class Dog{
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
//重写String方法
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
运行结果为:
Dog{name='小花', age=23}
Object类中的equals()方法。
源代码
public boolean equals(Object obj) { return (this == obj); }
默认情况下比较的是对象的引用是否相同。一般重写该方法。
package org.baidu1;
import java.util.Objects;
public class Mytest {
public static void main(String[] args) {
Dog dog = new Dog("小花",23);
Dog dog1 = new Dog("小花",23);
//判断的是他们的引用,是不相等的
System.out.println(dog==dog1);
//类型转换异常
boolean a = dog.equals(new Student());
System.out.println(a);
boolean b=dog.equals(dog1);
System.out.println(b);
}
}
class Dog {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
//判断如果是和自己比较就返回true
if (this == o) {
return true;
}
// if (!(obj instanceof Student)) {
// return false;
// }用instanceof来判断是否是同一类
if (o == null || getClass() != o.getClass()) {
return false;
}
Dog dog = (Dog) o;
return age == dog.age &&
Objects.equals(name, dog.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
class Student {
}
运行结果为:
false
false
true