目录
String ,StringBuffer 和 StringBuilder的比较
API
API : java语言中实际提供的类和接口
API 文档:对Java中提供的类和接口中的功能进行说明的文档。
Object类
Object类是所有Java类的祖先(根基类)。每个类都使用 Object 作为 超类(父类)。所有对象(包括数组)都实现这个类的方法。
所有类直接间接继承Object ,为实现多态性.
如果在类的声明中未使用extends关键字指明其基类,则默认基类为 Object类
public class Person { }
等价于: public class Person extends Object { }
toString()
Object类中定义有public String toString()方法,其返回值是 String 类型,描述当前对象的有关信息。
String toString() 返回对象的字符串表示形式。
native:
修饰的方法称为本地方法(有些方法java是不实现的,直接调用本地操作系统中的方法)
输出一个对象时,默认回调用类中toString(), 我们的类中如果没有定义toString(),找父类中的toString()。
Object类中的toString()方法:
public String toString() {
getClass().getName()+"@" hashCode();---------------> 转成16进制的字符串
}
(1)没有进行toString()方法重写.
public class Car extends Object{
String name;
int price;
public Car(String name, int price) {
this.name = name;
this.price = price;
}
}
public class JavaApiDemo {
public static void main(String[] args) {
Car car = new Car("宝马", 3000000);
System.out.println(car);//javaapi.Car@1b6d3586
System.out.println(car.toString()); //javaapi.Car@1b6d3586
}
}
(2) 重写toString()方法: 将对象以字符串形式输出
public class Car extends Object{
String name;
int price;
public Car(String name, int price) {
this.name = name;
this.price = price;
}
//将对象以字符串形式输出
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
}
public class JavaApiDemo {
public static void main(String[] args) {
Car car = new Car("baoma",100000);
System.out.println(car); //Car{name='baoma', price=100000}
System.out.println(car.toString());//Car{name='baoma', price=100000}
}
}
equals()
Object类中的equals()方法:
public boolean equals(Object obj) {
return (this == obj);
}
== (1)用于基本类型比较 比较的值是否相等
(2) 用于引用类型比较 比较的是引用地址(对象地址)是否相等
public class Car extends Object{
String name;
int price;
public Car(String name, int price) {
this.name = name;
this.price = price;
}
//将对象以字符串形式输出
@Override
public String toString() {
return "Car{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Car){
Car car = (Car)obj;
return this.name.equals(car.name)&&this.price==car.price;
}
return false;
}
}
public class ObjectDemo2 {
public static void main(String[] args) {
int a = 10;
int b = 10;
System.out.println(a==b);//true
Car car1 = new Car("bsj",100000);
Car car2 = new Car("bsj",100000);
Car car3 = car2;
/*
car1.equals(car2) 由于Car类中没有重写equlas(),那么调用Object类中的equals()
public boolean equals(Object obj) {
return (this == obj);
}
*/
System.out.println(car1.equals(car2));//true car1==car2
System.out.println(car2.equals(car3));//true Car car3 = car2;
/*
字符串类中重写了Object类中的equals() 实现是比较两个字符串中每一个字母是否相等
所以一般默认为equals() 方比较的是对象中内容是否相等
*/
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1.equals(s2));//true
}
}
System.out.println(s1.equals(s2));
字符串类中重写了Object类中的equals() 实现是比较两个字符串中每一个字母是否相等
所以一般默认为equals() 方比较的是对象中内容是否相等。
源码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true